在javascript中查找并删除内部数组值

问题描述 投票:-1回答:4

我有一个嵌套数组。我需要从内部数组值中查找和删除。

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的答案,它更舒适。

javascript arrays lodash
4个回答
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);

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);

0
投票

看看这个链接:remove an element of an array and resize it他们使用splice删除元素并调整大小。尝试使用多维数组。这个我认为它应该适用于您的问题mainArray [0] .splice(2,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});
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.