过滤对象并将其添加到数组中而不重复

时间:2019-02-25 23:13:28

标签: javascript arrays object ecmascript-6

我正在尝试确保在添加对象之前,在数组中没有该对象。如果它在里面,我想将其删除并在顶部添加一个新的(非常类似于浏览器的历史记录)

    let numberArray =  [ {
  "name": "Smith",
    "number": "088-002-0002",
},
 {
  "name": "Jhon",
    "number": "088-111-2222",
},];

let test = { "name": "Smith",
  "number": "088-002-0002",};

numberArray.filter(obj => obj.number !== test.number);
numberArray.unshift(test);

console.log(numberArray);

//Expected
 Array [
 Object {
    "name": "Smith",
    "number": "088-002-0002",
 },
 Object {
   "name": "Jhon",
   "number": "088-111-2222",
 },
]

3 个答案:

答案 0 :(得分:1)

使用函数findIndex,然后检查是否indexOf > -1(在这种情况下,删除该索引),最后unshift新对象。

// This is to illustrate -> "name": "Smithhhhh"
let numberArray = [{    "name": "Smithhhhh",    "number": "088-002-0002",  },  {    "name": "Jhon",    "number": "088-111-2222",  }],
    test = {  "name": "Smith",  "number": "088-002-0002",},
    indexOf = numberArray.findIndex(obj => obj.number === test.number);
    
if (indexOf !== -1) numberArray.splice(indexOf, 1);

numberArray.unshift(test);
console.log(numberArray);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

您可以将includesindexOfunshift一起使用,如下所示:

function addToArray(obj, arr) {
    if (arr.includes(obj)) {
        arr.splice(arr.indexOf(obj), 1);
        arr.unshift(obj);
    }
}

答案 2 :(得分:0)

使用.find()搜索对象。如果未返回对象,请使用.unshift()更新数组。

let numberArray = [{
    "name": "Smith",
    "number": "088-002-0002",
  },
  {
    "name": "Jhon",
    "number": "088-111-2222",
  },
];

let test = {
  "name": "Smith",
  "number": "088-002-0002",
};



if (!numberArray.find(o => o.number === test.number)) {
  numberArray.unshift(test);
}



console.log(numberArray);