gpt4 book ai didi

javascript - 比较数组与 JavaScript 或 jQuery

转载 作者:行者123 更新时间:2023-11-30 06:59:25 29 4
gpt4 key购买 nike

我有两个数组,一个是像这样的简单数组:

["Adrian", "Jhon"]

另一个数组是我从 jSon 对象转换而来的对象数组。原来的 jSon 是这样的:

[
{
"Nome": "Jhon",
"Departamento": "Test"
},
{
"Nome": "Adrian",
"Departamento": "Test"
},
{
"Nome": "Jessy",
"Departamento": "Test"
}
]

现在我需要比较第一个数组和第二个数组。如果 Nome 属性与我的第一个数组匹配,我会将整个对象返回到另一个对象数组。

如何使用 jQuery 或纯 JavaScript 保持第一个数组的顺序?

编辑 - 停止投票

我已经试过了:

jQuery.each(array, function (x) {
novoRepo.push(jQuery.grep(repositorio, function (a) {
return a.Nome == array[x];
}));
});

但是我得到一个异常,说 a.Nome 是未定义的。

最佳答案

使用 Array filter method :

var search = ["Jhon","Adrian"],
data = [
{"Nome": "Jhon", "Departamento": "Test"},
{"Nome": "Adrian", "Departamento": "Test"},
{"Nome": "Jessy", "Departamento": "Test"}
];
var result = data.filter(function(obj) {
return search.indexOf(obj.Nome) >= 0;
});

对于那些不支持filter的浏览器或 indexOf (特别是 IE<9)您可以填充它们或使用 jQuery 等价物 $.grep$.inArray (有关显式代码,请参阅下面@NULL 的回答)。


要保留 search 数组的顺序而不是 data 数组的顺序,您可以使用 map 当每个搜索名称都有data 中只有一个结果:

result = search.map(function(name) {
for (var i=0; i<data.length; i++)
if (data[i].Nome == name)
return data[i];
});

如果每个名字都没有或有多个结果,你最好使用concatMap:

result = Array.prototype.concat.apply(null, search.map(function(name) {
return data.filter(function(obj) {
return obj.Nome == name;
});
});

或使用 $.map它会自动解包数组:

result = $.map(search, function(name) {
return $.grep(data, function(obj) {
return obj.Nome == name;
});
});

关于javascript - 比较数组与 JavaScript 或 jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17297973/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com