我有一个嵌套数组。我需要从内部数组值中找到并删除它。
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的答案吗,它更舒适。
答案 0 :(得分:0)
使用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);

答案 1 :(得分:0)
您可以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);

答案 2 :(得分:0)
点击此链接:remove an element of an array and resize it 他们使用splice删除元素并调整大小。尝试使用多维数组。这个我认为它应该适用于您的问题mainArray [0] .splice(2,3)。
答案 3 :(得分:0)
迭代数组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});
}