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

时间:2018-04-10 12:28:15

标签: javascript arrays lodash

我有一个嵌套数组。我需要从内部数组值中找到并删除它。

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

4 个答案:

答案 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});
}