从特定对象的数组中删除特定元素

时间:2018-02-23 12:58:27

标签: javascript

我需要修改嵌套数组。在此示例中,我想从ID为content 2

的对象的目标数组中删除ZFrNsQKSY6ywSzYps
var array = [
  { _id: "QKSY6ywSzYpsZFrNs", target: ["content 1"]}
  { _id: "ZFrNsQKSY6ywSzYps", target: ["content 1", "content 2"]}
  { _id: "SzYpsZFrNQKSY6yws", target: ["content 1"]}
]

我尝试使用find()但是我没有更新数组。所以这似乎不是正确的方法。

4 个答案:

答案 0 :(得分:0)

var newarray = []
for(var i1 = 0; i1< array.length;i1++){
  var subarray = []
  for(var i2 = 0; i1<array[0].target.length;i++){
    if(array[0].target[0]!="content 2"){ // or desired removed content
      subarray.push(array[0].target[0])
    }
  }
newarray.push({"_id":array[0].id,"target":subarray})
}

之后只需访问newarray

答案 1 :(得分:0)

首先:数组中的元素应以逗号分隔。

第二:是否有更新目标数组的逻辑?如果是这样,您可以迭代元素并根据该逻辑修改其目标。

除此之外你总能做到这一点

array[1].target = ["content1"]

答案 2 :(得分:0)

尝试tihs方法:

const array = [
  { _id: "QKSY6ywSzYpsZFrNs", target: ["content 1"]},
  { _id: "ZFrNsQKSY6ywSzYps", target: ["content 1", "content 2"]},
  { _id: "SzYpsZFrNQKSY6yws", target: ["content 1"]}
]

console.log(array);

array.forEach(
    item =>
        // filter out the unwanted content
        item.target = item.target.filter(
            content => content !== "content 2"
        )
)

console.log(array);

答案 3 :(得分:0)

您可以使用find()方法获取对象,然后使用indexOf()查找要删除的数组中的元素,如果找到splice()方法则将其删除。

var array = [
  { _id: "QKSY6ywSzYpsZFrNs", target: ["content 1"]},
  { _id: "ZFrNsQKSY6ywSzYps", target: ["content 1", "content 2"]},
  { _id: "SzYpsZFrNQKSY6yws", target: ["content 1"]}
]

const obj = array.find(({_id}) => _id == 'ZFrNsQKSY6ywSzYps');

if(obj) {
  const i = obj.target.indexOf('content 2');
  if(i != -1) obj.target.splice(i, 1)
}

console.log(array)