【问题标题】:How to remove object from arrayList using javascript or jquery?如何使用 javascript 或 jquery 从 arrayList 中删除对象?
【发布时间】:2019-07-11 16:12:57
【问题描述】:

我有一个正在推送的arrayList:

imageList.push({
    docId: docId,
    letterNo: letterNo,
    seqNo: seqNo
});

首先推送到我的数组中的数据是 docId:1 ,letterNo:1,seqNo:1 即:

"{"docId":1,"letterNo":1,"seqNo":1}"

另外一次我发送的New datadocId:2 ,letterNo:1,seqNo:1 这是:

 "{"docId":2,"letterNo":1,"seqNo":1}"

我想将 arrayList 的所有旧值与新值进行比较,如果所有这三个属性都匹配,那么我需要从 arrayList 中切片旧对象。例如,如果我再次发送"{"docId":1,"letterNo":1,"seqNo":1}",则应从arraylist 中弹出旧对象,因为它与旧对象匹配并且需要推送当前对象。所以我尝试了:

imageList = imageList
    .filter(function (
        obj) {
        return (obj.docId !== docId && obj.letterNo !== letterNo && obj.seqNo !== seqNo);
    });

虽然两个对象1和2的docId不同,需要推送,但只是从arrayList中删除所有对象,虽然三个属性都不匹配。

【问题讨论】:

  • 是是对不起它的数组
  • 如果旧对象与新对象相似,是否要从数组中删除?
  • 是的@PrasanthGanesan,但是对象的所有属性都应该匹配
  • Array.splice 如果要从数组中删除某些内容可能会有所帮助
  • 使用|| 而不是&&

标签: javascript jquery arraylist


【解决方案1】:

var newData = {
    "docId":2,
    "letterNo":1,
    "seqNo":1
};
//Solution using filters
var insertNewData = false;
var imageList = [{
    "docId":1,
    "letterNo":1,
    "seqNo":1
},
{
    "docId":2,
    "letterNo":1,
    "seqNo":1
},
{
    "docId":3,
    "letterNo":1,
    "seqNo":1
}];
imageList = imageList.filter(function(oldData){
    if(oldData["docId"] == newData["docId"] && oldData["letterNo"] == newData["letterNo"] && oldData["seqNo"] == newData["seqNo"])
    {
        insertNewData = true;//a flag
        return false;//remove old data from array
    }
    else
        return true;
});
if(insertNewData)
{
    imageList.push(newData);
    insertNewData = false;
    console.log("old data is removed and new data is pushed using filters",imageList);
}

除此之外,我想提供一些解决方案,以防止删除项目并再次将删除的项目添加到数组中。因为如果旧数据与新数据相似,则不需要删除它。相反,如果旧数据已经存在,您需要告诉您的程序不要存储新数据。

//For searching objects in an array, convert objects into strings.
for(var i in imageList)
{
    imageList[i] = JSON.stringify(imageList[i]);
}

//Solution 1: Using Array.includes()
if(!imageList.includes(JSON.stringify(newData)))
    imageList.push(JSON.stringify(newData));

//Solution 2: Using Array.indexOf()
if(imageList.indexOf(JSON.stringify(newData)) == -1)
    imageList.push(JSON.stringify(newData));

您的过滤器不起作用,因为 return (obj.docId !== docId && obj.letterNo !== letterNo && obj.seqNo !== seqNo); 将返回 true。如果满足该条件,则需要返回 false,以便从数组中过滤掉旧值。

【讨论】:

  • 不知道您发送的链接。但我的工作正常,即使在堆栈溢出编译器中
  • 我的解决方案运行良好。你为什么投反对票?
  • 你能说得更具体点吗?否则有 4 个
  • Thushar,我正在尝试推送重复数据。这就是他们进入 else 部分的原因。
【解决方案2】:

在添加新数据之前,您可以使用以下代码检查并删除重复的数据:

function GetDuplicatedIndex(imageArray, newData) {
    return imageArray.findIndex(x => (x.docId == newData.docId && x.letterNo == newData.letterNo && x.seqNo == newData.seqNo));
}

var newData = {"docId":1,"letterNo":1,"seqNo":1}

// find the index of the duplicated data
var dupIndex = GetDuplicatedIndex(imageList, newData);

// remove the duplicated one if exists
if (dupIndex > -1) { imageList.splice(dupIndex, 1); }

// add new data
imageList.push(newData);

【讨论】:

    【解决方案3】:
    var imageList = [];
    
    function checkPush(value) {
      imageList.map((val, index) => {
        if (
          value.docId == val.docId &&
          value.letterNo == val.letterNo &&
          value.seqNo == val.seqNo
        ) {
          imageList.splice(index, 1);
        }
      });
      imageList.push(value);
    }
    checkPush({ docId: 1, letterNo: 1, seqNo: 1 });
    checkPush({ docId: 2, letterNo: 1, seqNo: 1 });
    checkPush({ docId: 1, letterNo: 1, seqNo: 1 });
    console.log(imageList);
    

    【讨论】:

      【解决方案4】:

      此代码将为您提供所需的输出...

      var imageList = [
        {
          docId: 1,
          letterNo: 1,
          seqNo: 1
        },
        {
          docId: 2,
          letterNo: 2,
          seqNo: 2
        },
        {
          docId: 3,
          letterNo: 3,
          seqNo: 3
        }
      ];
      
      const someFunction = (imageList = [], docId, letterNo, seqNo) => {
        let newimageList = imageList
          .filter(image => {
            let newValues = [docId, letterNo, seqNo];
            let imageListvalues = [...Object.values(image)];
            return !(JSON.stringify(newValues) === JSON.stringify(imageListvalues));
          });
        
          newimageList.push({
            docId: docId,
            letterNo: letterNo,
            seqNo: seqNo
          });
      
        return newimageList;
      };
      
      var newimageList = []
      newimageList = someFunction(imageList, 1, 1, 1);
      newimageList = someFunction(newimageList, 1, 2, 1);
      
      console.log(newimageList);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-08
        • 1970-01-01
        • 2021-04-28
        • 2018-05-20
        • 2021-03-11
        • 1970-01-01
        • 2015-08-02
        相关资源
        最近更新 更多