我有一个嵌套数组。我需要从内部数组值中查找和删除。
mainArray = [
{
name:"name1",
idArray:["1", "2", "3"]
}
{
name:"name1",
idArray:["1", "2", "3", "5", "2"]
}
{
name:"name1",
idArray:["1", "2", "3", "4"]
}
]
我需要一个如下答案:
mainArray = [
{
name:"name1",
idArray:["1", "3"]
}
{
name:"name1",
idArray:["1", "3", "5"]
}
{
name:"name1",
idArray:["1", "3", "4"]
}
]
这意味着我想从idArray中删除id为“2”的值。你能给我一个来自lodas的答案,它更舒适。
你可以map
循环通过阵列。克隆每个元素并使用filter
idArray
let mainArray = [{
name: "name1",
idArray: ["1", "2", "3"]
},
{
name: "name1",
idArray: ["1", "2", "3", "5", "2"]
},
{
name: "name1",
idArray: ["1", "2", "3", "4"]
}
];
let toRemove = '2';
let result = mainArray.map(o => {
o = Object.assign({}, o); //To clone the obj. Will not affect the original array
o.idArray = o.idArray.filter(v => v !== toRemove);
return o;
});
console.log(result);
添加reduce
删除空的idArray
let mainArray = [{
name: "name1",
idArray: ["1", "2", "3"]
},
{
name: "name1",
idArray: ["1", "2", "3", "5", "2"]
},
{
name: "name-removed",
idArray: ["2"]
},
{
name: "name1",
idArray: ["1", "2", "3", "4"]
},
{
name: "name-removed",
idArray: []
}
];
let toRemove = '2';
let result = mainArray.reduce((c, o) => {
o = Object.assign({}, o);
o.idArray = o.idArray.filter(v => v !== toRemove);
if (o.idArray.length) c.push(o);
return c;
}, []);
console.log(result);
使用lodash
可能很复杂,无法理解操作背后的逻辑。这可以使用简单的JavaScript实现,如下所示:
var removeVal = '2';
var mainArray = [
{
name:"name1",
idArray:["1", "2", "3"]
},
{
name:"name1",
idArray:["1", "2", "3", "5", "2"]
},
{
name:"name1",
idArray:["1", "2", "3", "4"]
}
];
mainArray.forEach(function(obj){
var index = obj.idArray.indexOf(removeVal);
if(index !== -1 ){
obj.idArray.splice(index, 1);
}
});
console.log(mainArray);
看看这个链接:remove an element of an array and resize it他们使用splice删除元素并调整大小。尝试使用多维数组。这个我认为它应该适用于您的问题mainArray [0] .splice(2,3)。
迭代数组mainArray
并从idArray
数组中找到唯一值
mainArray.forEach(function(data){
data.idArray = findUnique(data.idArray)
});
console.log(mainArray);
function findUnique(a){
return a.filter(function(value){ return a.filter(function(val){ return val === value}).length === 1});
}