在下一个数组中查找要替换的对象数组
Find array of objects in next array to replace
我有两个下面的数组对象。我想找到第一个数组的所有这些 ID,并使它们在第二个对象数组中处于活动状态,其余的必须在状态属性中变为 none。
var searchIDs = [{ "id":"6001", "other" : "..." },
{ "id":"6002", "other" : "..."}]
var list = [
{"id":"9666", "status":"active"},
{"id":"9667", "status":"none"},
{"id":"9999", "status":"none"},
{"id":"9668", "status":"none"},
{"id":"9669", "status":"active"},
{"id":"6001", "status":"none"},
{"id":"6002", "status":"none"},
{"id":"6003", "status":"none"},
{"id":"6004", "status":"none"},
{"id":"6005", "status":"active"},
{"id":"6006", "status":"none"},
{"id":"6007", "status":"none"},
{"id":"6008", "status":"none"},
{"id":"6009", "status":"none"}
]
for (var i = 0 ; i < searchIDs.length ; i ++) {
list.find(v => v.id !== searchIDs[i].id).status = "none";
list.find(v => v.id === searchIDs[i].id).status = "active";
Array.prototype.push.apply(list);
}
console.log('Final List : ' + JSON.stringify(list));
但是当我尝试使用带有 for 循环的 find 函数时,它暂时不起作用。我该如何解决?感谢阅读我的问题!谢谢!
最终结果应该是
[
{"id":"9666", "status":"none"},
{"id":"9667", "status":"none"},
{"id":"9999", "status":"none"},
{"id":"9668", "status":"none"},
{"id":"9669", "status":"none"},
{"id":"6001", "status":"active"},
{"id":"6002", "status":"active"},
{"id":"6003", "status":"none"},
{"id":"6004", "status":"none"},
{"id":"6005", "status":"none"},
{"id":"6006", "status":"none"},
{"id":"6007", "status":"none"},
{"id":"6008", "status":"none"},
{"id":"6009", "status":"none"}
]
我建议在对第二个列表 (list) 的 Array.map 调用中搜索第一个列表 (searchIDs) 中的项目,我们实质上是在检查列表的每个成员是否也是searchIDs.
如果 searchIDs 非常大,这可能不是非常有效,因此可以创建一个 Set and check for membership using Set.has。
var searchIDs = [{ "id":"6001", "other" : "..." },
{ "id":"6002", "other" : "..."}]
var list = [
{"id":"9666", "status":"active"},
{"id":"9667", "status":"none"},
{"id":"9999", "status":"none"},
{"id":"9668", "status":"none"},
{"id":"9669", "status":"active"},
{"id":"6001", "status":"none"},
{"id":"6002", "status":"none"},
{"id":"6003", "status":"none"},
{"id":"6004", "status":"none"},
{"id":"6005", "status":"active"},
{"id":"6006", "status":"none"},
{"id":"6007", "status":"none"},
{"id":"6008", "status":"none"},
{"id":"6009", "status":"none"}
]
list = list.map(r => {
return { id: r.id, status: searchIDs.find(s => s.id === r.id) ? "active": "none" };
})
console.log(list);
这有效。
var searchIDs = [
{ "id":"6001", "other" : "..." },
{ "id":"6002", "other" : "..."}
]
var list = [
{"id":"9666", "status":"active"},
{"id":"9667", "status":"none"},
{"id":"9999", "status":"none"},
{"id":"9668", "status":"none"},
{"id":"9669", "status":"active"},
{"id":"6001", "status":"none"},
{"id":"6002", "status":"none"},
{"id":"6003", "status":"none"},
{"id":"6004", "status":"none"},
{"id":"6005", "status":"active"},
{"id":"6006", "status":"none"},
{"id":"6007", "status":"none"},
{"id":"6008", "status":"none"},
{"id":"6009", "status":"none"}
]
let resArr = list.map(function(item){
let obj = item;
if(searchIDs.find(x => x.id == item.id)){
obj.status = "active";
}else{
obj.status = "none";
}
return obj;
});
console.log(resArr);
如果我理解正确的话。这可能就是您要找的
var searchIDs = [
{ "id":"6001", "other" : "..." },
{ "id":"6002", "other" : "..."}
]
var list = [
{"id":"9666", "status":"active"},
{"id":"9667", "status":"none"},
{"id":"9999", "status":"none"},
{"id":"9668", "status":"none"},
{"id":"9669", "status":"active"},
{"id":"6001", "status":"none"},
{"id":"6002", "status":"none"},
{"id":"6003", "status":"none"},
{"id":"6004", "status":"none"},
{"id":"6005", "status":"active"},
{"id":"6006", "status":"none"},
{"id":"6007", "status":"none"},
{"id":"6008", "status":"none"},
{"id":"6009", "status":"none"}
]
// This line creates a new array with only the id's in it
const ids = searchIDs.map(line => line.id)
// We will map this array
// if the this line id appears in the ids list we can set the status to active. otherwise to none
var newList = list.map(line => {
// you could also use .includes
line.status = ids.indexOf(line.id) > -1 ? 'active' : 'none';
return line;
})
console.log(newList)
下面是一个非常基本的方法,希望对您有所帮助。
var searchIDs = [{ "id":"6001", "other" : "..." },
{ "id":"6002", "other" : "..."}]
var list = [
{"id":"9666", "status":"active"},
{"id":"9667", "status":"none"},
{"id":"9999", "status":"none"},
{"id":"9668", "status":"none"},
{"id":"9669", "status":"active"},
{"id":"6001", "status":"none"},
{"id":"6002", "status":"none"},
{"id":"6003", "status":"none"},
{"id":"6004", "status":"none"},
{"id":"6005", "status":"active"},
{"id":"6006", "status":"none"},
{"id":"6007", "status":"none"},
{"id":"6008", "status":"none"},
{"id":"6009", "status":"none"}
]
let newsearchIds = [];
for (var i = 0 ; i < searchIDs.length ; i ++) {
for(let key in searchIDs[i]){
newsearchIds.push(searchIDs[i][key]);
}
}
for (var i = 0 ; i < list.length ; i ++) {
for (var j = 0 ; j < newsearchIds.length ; j ++) {
if(list[i].id === newsearchIds[j]){
list[i].status= "active";
}
}
}
console.log(list);
我有两个下面的数组对象。我想找到第一个数组的所有这些 ID,并使它们在第二个对象数组中处于活动状态,其余的必须在状态属性中变为 none。
var searchIDs = [{ "id":"6001", "other" : "..." },
{ "id":"6002", "other" : "..."}]
var list = [
{"id":"9666", "status":"active"},
{"id":"9667", "status":"none"},
{"id":"9999", "status":"none"},
{"id":"9668", "status":"none"},
{"id":"9669", "status":"active"},
{"id":"6001", "status":"none"},
{"id":"6002", "status":"none"},
{"id":"6003", "status":"none"},
{"id":"6004", "status":"none"},
{"id":"6005", "status":"active"},
{"id":"6006", "status":"none"},
{"id":"6007", "status":"none"},
{"id":"6008", "status":"none"},
{"id":"6009", "status":"none"}
]
for (var i = 0 ; i < searchIDs.length ; i ++) {
list.find(v => v.id !== searchIDs[i].id).status = "none";
list.find(v => v.id === searchIDs[i].id).status = "active";
Array.prototype.push.apply(list);
}
console.log('Final List : ' + JSON.stringify(list));
但是当我尝试使用带有 for 循环的 find 函数时,它暂时不起作用。我该如何解决?感谢阅读我的问题!谢谢!
最终结果应该是
[
{"id":"9666", "status":"none"},
{"id":"9667", "status":"none"},
{"id":"9999", "status":"none"},
{"id":"9668", "status":"none"},
{"id":"9669", "status":"none"},
{"id":"6001", "status":"active"},
{"id":"6002", "status":"active"},
{"id":"6003", "status":"none"},
{"id":"6004", "status":"none"},
{"id":"6005", "status":"none"},
{"id":"6006", "status":"none"},
{"id":"6007", "status":"none"},
{"id":"6008", "status":"none"},
{"id":"6009", "status":"none"}
]
我建议在对第二个列表 (list) 的 Array.map 调用中搜索第一个列表 (searchIDs) 中的项目,我们实质上是在检查列表的每个成员是否也是searchIDs.
如果 searchIDs 非常大,这可能不是非常有效,因此可以创建一个 Set and check for membership using Set.has。
var searchIDs = [{ "id":"6001", "other" : "..." },
{ "id":"6002", "other" : "..."}]
var list = [
{"id":"9666", "status":"active"},
{"id":"9667", "status":"none"},
{"id":"9999", "status":"none"},
{"id":"9668", "status":"none"},
{"id":"9669", "status":"active"},
{"id":"6001", "status":"none"},
{"id":"6002", "status":"none"},
{"id":"6003", "status":"none"},
{"id":"6004", "status":"none"},
{"id":"6005", "status":"active"},
{"id":"6006", "status":"none"},
{"id":"6007", "status":"none"},
{"id":"6008", "status":"none"},
{"id":"6009", "status":"none"}
]
list = list.map(r => {
return { id: r.id, status: searchIDs.find(s => s.id === r.id) ? "active": "none" };
})
console.log(list);
这有效。
var searchIDs = [
{ "id":"6001", "other" : "..." },
{ "id":"6002", "other" : "..."}
]
var list = [
{"id":"9666", "status":"active"},
{"id":"9667", "status":"none"},
{"id":"9999", "status":"none"},
{"id":"9668", "status":"none"},
{"id":"9669", "status":"active"},
{"id":"6001", "status":"none"},
{"id":"6002", "status":"none"},
{"id":"6003", "status":"none"},
{"id":"6004", "status":"none"},
{"id":"6005", "status":"active"},
{"id":"6006", "status":"none"},
{"id":"6007", "status":"none"},
{"id":"6008", "status":"none"},
{"id":"6009", "status":"none"}
]
let resArr = list.map(function(item){
let obj = item;
if(searchIDs.find(x => x.id == item.id)){
obj.status = "active";
}else{
obj.status = "none";
}
return obj;
});
console.log(resArr);
如果我理解正确的话。这可能就是您要找的
var searchIDs = [
{ "id":"6001", "other" : "..." },
{ "id":"6002", "other" : "..."}
]
var list = [
{"id":"9666", "status":"active"},
{"id":"9667", "status":"none"},
{"id":"9999", "status":"none"},
{"id":"9668", "status":"none"},
{"id":"9669", "status":"active"},
{"id":"6001", "status":"none"},
{"id":"6002", "status":"none"},
{"id":"6003", "status":"none"},
{"id":"6004", "status":"none"},
{"id":"6005", "status":"active"},
{"id":"6006", "status":"none"},
{"id":"6007", "status":"none"},
{"id":"6008", "status":"none"},
{"id":"6009", "status":"none"}
]
// This line creates a new array with only the id's in it
const ids = searchIDs.map(line => line.id)
// We will map this array
// if the this line id appears in the ids list we can set the status to active. otherwise to none
var newList = list.map(line => {
// you could also use .includes
line.status = ids.indexOf(line.id) > -1 ? 'active' : 'none';
return line;
})
console.log(newList)
下面是一个非常基本的方法,希望对您有所帮助。
var searchIDs = [{ "id":"6001", "other" : "..." },
{ "id":"6002", "other" : "..."}]
var list = [
{"id":"9666", "status":"active"},
{"id":"9667", "status":"none"},
{"id":"9999", "status":"none"},
{"id":"9668", "status":"none"},
{"id":"9669", "status":"active"},
{"id":"6001", "status":"none"},
{"id":"6002", "status":"none"},
{"id":"6003", "status":"none"},
{"id":"6004", "status":"none"},
{"id":"6005", "status":"active"},
{"id":"6006", "status":"none"},
{"id":"6007", "status":"none"},
{"id":"6008", "status":"none"},
{"id":"6009", "status":"none"}
]
let newsearchIds = [];
for (var i = 0 ; i < searchIDs.length ; i ++) {
for(let key in searchIDs[i]){
newsearchIds.push(searchIDs[i][key]);
}
}
for (var i = 0 ; i < list.length ; i ++) {
for (var j = 0 ; j < newsearchIds.length ; j ++) {
if(list[i].id === newsearchIds[j]){
list[i].status= "active";
}
}
}
console.log(list);