在对象数组中查找数据数组
Finding an array of data in an array of objects
我有一组值,如下所示:
["Ashar", 68345, 14, 46100, "Retail", 1, ""]
我还有一组对象,如下所示:
[
{id: 1, cells: ["Ashar", 68345, 14, 46100, "Retail", 1, ""]},
{id: 2, cells: ["Ashar", 300881, 14, 37000, "Retail", 3, 3]},
{id: 3, cells: ["Rob", 94448, 17, 11395, "Retail", 1, ""]},
{id: 4, cells: ["Shahab", 19023870, 219, 12500, "Retail", 1, ""]},
{id: 5, cells: ["David", 29008000, 229, 12500, "Retail", 5, 26]}
]
我想做的是通过匹配两个数组从第二个数组中获取对象中的id。我写了一个查找函数,理论上应该在第二个数组中找到值数组,以便我可以访问 id。但是,它返回未定义,所以我正在做的事情显然有问题。
这是我目前拥有的代码:
let row_id = rows.find(row => {
dataEntriesArray === row.cells;
});
其中 rows 是第二个数组,dataEntriesArray 是第一个数组。
如果能帮我解决这个问题,我将不胜感激。
感谢您的宝贵时间。
使用Array#every
var ip1 = ["Ashar", 68345, 14, 46100, "Retail", 1, ""];
var ip2 = [{
id: 1,
cells: ["Ashar", 68345, 14, 46100, "Retail", 1, ""]
}, {
id: 2,
cells: ["Ashar", 300881, 14, 37000, "Retail", 3, 3]
}, {
id: 3,
cells: ["Rob", 94448, 17, 11395, "Retail", 1, ""]
}, {
id: 4,
cells: ["Shahab", 19023870, 219, 12500, "Retail", 1, ""]
}, {
id: 5,
cells: ["David", 29008000, 229, 12500, "Retail", 5, 26]
}];
var op = ip2.filter(function(item) {
return item.cells.every(function(el) {
return ip1.indexOf(el) > -1;
})
});
console.log(JSON.stringify(op));
此提案使用 search
数组和 returns id 检查 cells
数组的每一部分,如果找到的话。
function getId(data, search) {
var id;
data.some(a => {
if (a.cells.every((b, i) => b === search[i])) {
id = a.id;
return true;
}
});
return id;
}
var search =["Ashar", 68345, 14, 46100, "Retail", 1, ""],
data= [{id: 1, cells: ["Ashar", 68345, 14, 46100, "Retail", 1, ""]}, {id: 2, cells: ["Ashar", 300881, 14, 37000, "Retail", 3, 3]}, {id: 3, cells: ["Rob", 94448, 17, 11395, "Retail", 1, ""]}, {id: 4, cells: ["Shahab", 19023870, 219, 12500, "Retail", 1, ""]}, {id: 5, cells: ["David", 29008000, 229, 12500, "Retail", 5, 26]}];
console.log(getId(data, search));
试试这个:
var search =["Ashar", 68345, 14, 46100, "Retail", 1, ""],
foundId = null,
a = [{id: 1, cells: ["Ashar", 68345, 14, 46100, "Retail", 1, ""]}, {id: 2, cells: ["Ashar", 300881, 14, 37000, "Retail", 3, 3]}, {id: 3, cells: ["Rob", 94448, 17, 11395, "Retail", 1, ""]}, {id: 4, cells: ["Shahab", 19023870, 219, 12500, "Retail", 1, ""]}, {id: 5, cells: ["David", 29008000, 229, 12500, "Retail", 5, 26]}];
search = search.sort().join();
a.forEach(function(entry) {
if (entry.cells.sort().join() === search){
foundId = entry.id;
return;
}
});
alert(foundId)
使用 Array.some
和 JSON.stringify
函数的简短解决方案:
var item = ["Rob", 94448, 17, 11395, "Retail", 1, ""],
data = [{id: 1, cells: ["Ashar", 68345, 14, 46100, "Retail", 1, ""]}, {id: 2, cells: ["Ashar", 300881, 14, 37000, "Retail", 3, 3]}, {id: 3, cells: ["Rob", 94448, 17, 11395, "Retail", 1, ""]}, {id: 4, cells: ["Shahab", 19023870, 219, 12500, "Retail", 1, ""]}, {id: 5, cells: ["David", 29008000, 229, 12500, "Retail", 5, 26]}];
var id;
data.some((obj) => JSON.stringify(obj['cells']) === JSON.stringify(item) && (id = obj['id']), id);
console.log(id); // 3
我有一组值,如下所示:
["Ashar", 68345, 14, 46100, "Retail", 1, ""]
我还有一组对象,如下所示:
[
{id: 1, cells: ["Ashar", 68345, 14, 46100, "Retail", 1, ""]},
{id: 2, cells: ["Ashar", 300881, 14, 37000, "Retail", 3, 3]},
{id: 3, cells: ["Rob", 94448, 17, 11395, "Retail", 1, ""]},
{id: 4, cells: ["Shahab", 19023870, 219, 12500, "Retail", 1, ""]},
{id: 5, cells: ["David", 29008000, 229, 12500, "Retail", 5, 26]}
]
我想做的是通过匹配两个数组从第二个数组中获取对象中的id。我写了一个查找函数,理论上应该在第二个数组中找到值数组,以便我可以访问 id。但是,它返回未定义,所以我正在做的事情显然有问题。
这是我目前拥有的代码:
let row_id = rows.find(row => {
dataEntriesArray === row.cells;
});
其中 rows 是第二个数组,dataEntriesArray 是第一个数组。
如果能帮我解决这个问题,我将不胜感激。
感谢您的宝贵时间。
使用Array#every
var ip1 = ["Ashar", 68345, 14, 46100, "Retail", 1, ""];
var ip2 = [{
id: 1,
cells: ["Ashar", 68345, 14, 46100, "Retail", 1, ""]
}, {
id: 2,
cells: ["Ashar", 300881, 14, 37000, "Retail", 3, 3]
}, {
id: 3,
cells: ["Rob", 94448, 17, 11395, "Retail", 1, ""]
}, {
id: 4,
cells: ["Shahab", 19023870, 219, 12500, "Retail", 1, ""]
}, {
id: 5,
cells: ["David", 29008000, 229, 12500, "Retail", 5, 26]
}];
var op = ip2.filter(function(item) {
return item.cells.every(function(el) {
return ip1.indexOf(el) > -1;
})
});
console.log(JSON.stringify(op));
此提案使用 search
数组和 returns id 检查 cells
数组的每一部分,如果找到的话。
function getId(data, search) {
var id;
data.some(a => {
if (a.cells.every((b, i) => b === search[i])) {
id = a.id;
return true;
}
});
return id;
}
var search =["Ashar", 68345, 14, 46100, "Retail", 1, ""],
data= [{id: 1, cells: ["Ashar", 68345, 14, 46100, "Retail", 1, ""]}, {id: 2, cells: ["Ashar", 300881, 14, 37000, "Retail", 3, 3]}, {id: 3, cells: ["Rob", 94448, 17, 11395, "Retail", 1, ""]}, {id: 4, cells: ["Shahab", 19023870, 219, 12500, "Retail", 1, ""]}, {id: 5, cells: ["David", 29008000, 229, 12500, "Retail", 5, 26]}];
console.log(getId(data, search));
试试这个:
var search =["Ashar", 68345, 14, 46100, "Retail", 1, ""],
foundId = null,
a = [{id: 1, cells: ["Ashar", 68345, 14, 46100, "Retail", 1, ""]}, {id: 2, cells: ["Ashar", 300881, 14, 37000, "Retail", 3, 3]}, {id: 3, cells: ["Rob", 94448, 17, 11395, "Retail", 1, ""]}, {id: 4, cells: ["Shahab", 19023870, 219, 12500, "Retail", 1, ""]}, {id: 5, cells: ["David", 29008000, 229, 12500, "Retail", 5, 26]}];
search = search.sort().join();
a.forEach(function(entry) {
if (entry.cells.sort().join() === search){
foundId = entry.id;
return;
}
});
alert(foundId)
使用 Array.some
和 JSON.stringify
函数的简短解决方案:
var item = ["Rob", 94448, 17, 11395, "Retail", 1, ""],
data = [{id: 1, cells: ["Ashar", 68345, 14, 46100, "Retail", 1, ""]}, {id: 2, cells: ["Ashar", 300881, 14, 37000, "Retail", 3, 3]}, {id: 3, cells: ["Rob", 94448, 17, 11395, "Retail", 1, ""]}, {id: 4, cells: ["Shahab", 19023870, 219, 12500, "Retail", 1, ""]}, {id: 5, cells: ["David", 29008000, 229, 12500, "Retail", 5, 26]}];
var id;
data.some((obj) => JSON.stringify(obj['cells']) === JSON.stringify(item) && (id = obj['id']), id);
console.log(id); // 3