我有一个包含不同长度的数组的数组。这些数组包含带有一些id的对象,如下所示:
[
[{
docID: 'EP/L007177/1',
weight: 0.60196078431373
}, {
//...
},
//...
],
[{
//...
}],
// ...
]
然后我每次都有另一个包含一些ID的数组。
另一个数组的示例:
docs:[ { ID: 'AS/P003/5' }, { ID: 'EP/L007177/1'} ,......]
如何提取原始数组中包含我在另一个数组中的ID的(唯一)索引号?
我创建了这个功能,但如果我只给它一个ID,它确实可以正常工作:
var getTopics = function (Ids, Data) {
var indexes = [];
Data.forEach(function(d, i) {
d.forEach(function(f) {
if ((Ids.indexOf(f.docID) > -1) && (indexes.indexOf(i) === -1)) {
indexes.push(i);
}
});
});
return indexes;
}
如果我这样做:
docs.forEach(function(o) {
list = gettopics(o.ID,Dataa)
})
我只得到一个索引,这不是我所期望的。
答案 0 :(得分:0)
据我所知,你想在嵌套数组中找到Object by ID(你可以用它做任何你想做的事情)。
以下是如何执行此操作的示例:
var arr1 = [
[{id: 1, data: 'xxx'}, {id: 2, data: 'yyy'}],
[{id: 3, data: 'zzz'}]];
function finById(id) {
var result = null;
arr1.forEach((row) => {
row.forEach((doc) => {
if(doc.id === id) result = doc;
})
})
return result;
}
答案 1 :(得分:0)
您的功能会起作用(虽然它不是最佳的),但是您调用它的方式有问题:
docs.forEach(function(o){ list = gettopics(o.ID,Dataa) })
一些问题:
相反,构建一个可以作为第一个参数传递给 getTopics 的数组。您可以使用以下表达式构建该数组:
docs.map(function(o){ return o.ID })
这将收集数组中 Docs 的所有 ID 值。现在将其作为第一个参数传递给 getTopics :
var list = getTopics(docs.map(function(o){ return o.ID }), data);
现在 list 将包含您期望的结果,即 Data 中与 doc 中的 ID 值对应的索引
使用首字母大写字母命名变量并不常见。这通常保留用于命名构造函数/类。
var getTopics = function (ids, data) {
var indexes = [];
data.forEach(function(d, i) {
d.forEach(function(f) {
if ((ids.indexOf(f.docID) > -1) && (indexes.indexOf(i) === -1)) {
indexes.push(i);
}
});
});
return indexes;
}
var data = [
[{
docID: 'EP/L007177/1',
weight: 0.602
}, {
docID: 'EP/L007177/2',
weight: 0.939
}, {
docID: 'EP/L007177/3',
weight: 0.511
}],
[{
docID: 'AB/L007177/1',
weight: 0.123
}, {
docID: 'AB/L007177/2',
weight: 0.923
}, {
docID: 'AB/L007177/3',
weight: 0.351
}]
];
var docs = [
{ID: 'EP/L007177/3'},
{ID: 'AB/L007177/2'}
];
var result = getTopics(docs.map(function(o){ return o.ID }), data);
console.log(result);