我有一个包含对象A:
的数组A = [
{
id: 12345,
folder: 'folder1',
name: 'Name1'
},
{
id: 12346,
folder: 'folder1',
name: 'Name2'
},
{
id: 12347,
folder: 'folder1',
name: 'Name3'
},
{
id: 12348,
folder: 'folder1',
name: 'Name4'
}
]
和带有id的数组B:
B = [12345, 12348]
我想基于来自B的ID来过滤/从A获取带有“folder”+“name”的新数组
res = ["folder1/Name1", "folder1/Name4"]
不确定如何根据B中的ID“过滤”A?
答案 0 :(得分:3)
一种非常快捷的方法是使用filter
和map
。
A.filter(function(a) {
return B.indexOf(a.id) >= 0;
})
.map(function(a) {
return a.folder+'/'+a.name;
});
答案 1 :(得分:2)
function findBy(array, search) {
var res = [],
arrayLen = array.length,
i;
for (i = 0; i < arrayLen; i++) {
if (~search.indexOf(array[i].id)) {
res.push(array[i].folder + '/' + array[i].name)
}
}
return res;
}
答案 2 :(得分:2)
另一种方法;使用reduce方法;
var result = A.reduce(function(acc, current) {
if(B.indexOf(current.id) !== -1) {
acc.push(current.folder + '/' + current.id);
}
return acc;
}, []);
DEMO:http://jsbin.com/biqicahaje/1/edit?js,console
优于@Clint Powell方法(也非常好,更具可读性/可维护性)的优势在于,您只能通过A.length
元素循环,而不是A.length + B.length
,具体取决于大小两个数组都不能进行优化。
答案 3 :(得分:1)
您可以在循环中创建一个循环来执行此操作。检查第一个数组的每个元素,然后id的匹配是否将数据文件夹/名称推送到新数组...
以下是一个例子:
<script type="text/javascript">
A = [
{
id: 12345,
folder: 'folder1',
name: 'Name1'
},
{
id: 12346,
folder: 'folder1',
name: 'Name2'
},
{
id: 12347,
folder: 'folder1',
name: 'Name3'
},
{
id: 12348,
folder: 'folder1',
name: 'Name4'
}
];
B = [12345, 12348];
***************新守则**********************************************
var result = [];
for(var i = 0; i < A.length; i++)
{
for(var j = 0; j < B.length; j++)
{
if(A[i].id == B[j])
{
result.push(A[i].folder + "/" + A[i].name);
}
}
}
for(var i = 0; i < result.length; i++)
{
window.alert(result[i]);
}
</script>
答案 4 :(得分:0)
就像brso05所说的那样。
使用类似于此代码段的简单B
循环循环遍历for
:
for (var i = 0; i < B.length; i++) {
var id = B[i];
}
对于B
上的每次迭代,运行A
并将结果放入结果数组中:
for (var j = 0; j < A.length; j++) {
if (A[j].id == id) {
results.push(A[j].folder + '/' + A[j].name);
}
}
结合这一点,以下代码段应该足以满足您的需求:
var results = new Array();
for (var i = 0; i < B.length; i++) {
var id = B[i];
for (var j = 0; j < A.length; j++) {
if (A[j].id == id) {
results.push(A[j].folder + '/' + A[j].name);
}
}
}
答案 5 :(得分:0)
var A = [
{
id: 12345,
folder: 'folder1',
name: 'Name1'
},
{
id: 12346,
folder: 'folder1',
name: 'Name2'
},
{
id: 12347,
folder: 'folder1',
name: 'Name3'
},
{
id: 12348,
folder: 'folder1',
name: 'Name4'
}
];
var B = [12345, 12348];
var result = [];
for(i in B){
var this_id = B[i];
for(j in A){
if(A[j].id == this_id){
result.push(A[j].folder+"/"+A[j].name);
}
}
}
console.log(result);