[英]Comparing arrays with JavaScript or jQuery
我有两个数组,一个是像这样的简单数组:
["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是不确定的。
使用数组filter
方法 :
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
(有关显式代码,请参见下面的$.inArray
答案)。
要保留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;
});
});
没有过滤器,您可以执行以下操作:
var found = [];
$.each(["Jhon","Adrian"],function(i, name) {
$.each(otherObject,function(j,obj) {
if (obj.Nome==name) found.push(obj); // you could leave if only one of each
});
});
使用$.grep
和$.inArray
看起来像这样:
var search = ["Jhon","Adrian"],
data = [
{"Nome": "Jhon", "Departamento": "Test"},
{"Nome": "Adrian", "Departamento": "Test"},
{"Nome": "Jessy", "Departamento": "Test"}
];
var result = $.grep(data, function(obj) {
return $.inArray(obj.Nome, search) >= 0;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.