如何从数组中对象的数组中删除此对象?

时间:2018-03-11 05:53:44

标签: javascript arrays

我不确定如何形成这个问题,但我会尽我所能。 我不知道如何通过'list:'部分中的_id删除对象。 所以,我有一个数组,在那个数组里面我有对象列表,在这些对象里面我又有了带对象的数组,所以我想从最后一个数组中删除一个对象,我该怎么做? 无法修复2天,我被困了! 谢谢!

[
  {
    "_id": "599a1344bf50847b0972a465",
    "title": "British Virgin Islands BC",
    "list": [],
    "price": "1350"
  },
  {
    "_id": "599a1322bf50847b0972a38e",
    "title": "USA (Nevada) LLC",
    "list": [
      {
        "_id": "599a1322bf50847b0972a384",
        "title": "Nominee Member",
        "service": "nominee-service",
        "price": "300"
      },
      {
        "_id": "599a1322bf50847b0972a385",
        "title": "Nominee Manager & General Power of Attorney (Apostilled)",
        "service": "nominee-service",
        "price": "650"
      },
      {
        "_id": "599a1322bf50847b0972a386",
        "title": "Special Power of Attorney",
        "service": "nominee-service",
        "price": "290"
      }
    ],
    "price": "789"
  },
  {
    "_id": "599a12fdbf50847b0972a2ad",
    "title": "Cyprus LTD",
    "list": [
      {
        "_id": "599a12fdbf50847b0972a2a5",
        "title": "Nominee Shareholder",
        "service": "nominee-service",
        "price": "370"
      },
      {
        "_id": "599a12fdbf50847b0972a2a6",
        "title": "Nominee Director & General Power or Attorney (Apostilled)",
        "service": "nominee-service",
        "price": "720"
      },
      {
        "_id": "599a12fdbf50847b0972a2ab",
        "title": "Extra Rubber Stamp",
        "service": "other-service",
        "price": "40"
      }
    ],
    "price": "1290"
  }
]

3 个答案:

答案 0 :(得分:0)

  

使用Vanilla JS:

function findAndRemove(data, id) {

  data.forEach(function(obj) {                    // Loop through each object in outer array

    obj.list = obj.list.filter(function(o) {      // Filter out the object with unwanted id, in inner array
      return o._id != id;
    });
  });
}

var data = [{
    "_id": "599a1344bf50847b0972a465",
    "title": "British Virgin Islands BC",
    "list": [],
    "price": "1350"
  },
  {
    "_id": "599a1322bf50847b0972a38e",
    "title": "USA (Nevada) LLC",
    "list": [{
        "_id": "599a1322bf50847b0972a384",
        "title": "Nominee Member",
        "service": "nominee-service",
        "price": "300"
      },
      {
        "_id": "599a1322bf50847b0972a385",
        "title": "Nominee Manager & General Power of Attorney (Apostilled)",
        "service": "nominee-service",
        "price": "650"
      },
      {
        "_id": "599a1322bf50847b0972a386",
        "title": "Special Power of Attorney",
        "service": "nominee-service",
        "price": "290"
      }
    ],
    "price": "789"
  },
  {
    "_id": "599a12fdbf50847b0972a2ad",
    "title": "Cyprus LTD",
    "list": [{
        "_id": "599a12fdbf50847b0972a2a5",
        "title": "Nominee Shareholder",
        "service": "nominee-service",
        "price": "370"
      },
      {
        "_id": "599a12fdbf50847b0972a2a6",
        "title": "Nominee Director & General Power or Attorney (Apostilled)",
        "service": "nominee-service",
        "price": "720"
      },
      {
        "_id": "599a12fdbf50847b0972a2ab",
        "title": "Extra Rubber Stamp",
        "service": "other-service",
        "price": "40"
      }
    ],
    "price": "1290"
  }
];

// Empty almost all of list, except middle one
findAndRemove(data, "599a1322bf50847b0972a384");
findAndRemove(data, "599a1322bf50847b0972a386");
findAndRemove(data, "599a12fdbf50847b0972a2a5");
findAndRemove(data, "599a12fdbf50847b0972a2a6");
findAndRemove(data, "599a12fdbf50847b0972a2ab");

console.log(data);

  

清除除中间列表以外的所有内容,只是为了更好的可视化。

答案 1 :(得分:0)

您可以使用Array.mapArray.filter来完成此操作。评论中的详细说明:

PS:此代码段使用ES6 arrow functionsspread operator

function removeById(arr, id) {
  // Array.map iterates over each item in the array,
  // and executes the given function on the item.
  // It returns an array of all the items returned by the function.
  return arr.map(obj => {

    // Return the same object, if the list is empty / null / undefined
    if (!obj.list || !obj.list.length) return obj;

    // Get a new list, skipping the item with the spedified id
    const newList = obj.list.filter(val => val._id !== id);

    // map function returns the new object with the filtered list
    return { ...obj, list: newList };
  });
}

const oldArray = <YOUR_ORIGINAL_ARRAY>;
const newArray = removeById(arr, "599a12fdbf50847b0972a2a5");

答案 2 :(得分:0)

@Abhijit Kar你的人工作得很好,谢谢你的伴侣! 我怎么能在以后拼接这个清单? 当我使用第一个数组中的对象时,我这样做了:

var inventory = jsonArrayList;    
for (var i = 0; i < inventory.length; i++) {
            if (inventory[i]._id == deleteProductById) {
              vm.items.splice(i, 1);
              break;
            }
          }

非常有帮助,非常感谢!