有什么方法可以将对象唯一地推送到数组?

时间:2019-02-19 01:43:19

标签: javascript arrays ecmascript-6 mongo-shell

是否有任何方法可以通过 ES6 用1种方法将对象唯一地推送到数组?

例如:

MyArray.pushUniquely(x);

还是很好用的旧版本? :

MyMethod(x) {

    if ( MyArray.IndexOf(x) === -1 )
        MyArray.Push(x);

}

ES6是否有任何方法可以唯一推送?

4 个答案:

答案 0 :(得分:2)

使用Set集合代替数组。

var mySet = new Set([1, 2, 3]);

mySet.add(4);
mySet.add(3);
mySet.add(0)

console.log(Array.from(mySet))

答案 1 :(得分:1)

使用includes(我对方法进行了扩展,因此您可以在所有数组上使用它):

Array.prototype.pushUnique(item) {
    if (!this.includes(item)) this.push(item);
}

或者,使用Set

mySet.add(x); //Will only run if x is not in the Set

答案 2 :(得分:1)

您可以使用lodash uniq方法。

var uniq = _.uniq([1,2,3,4,5,3,2,4,5,1])

console.log(uniq)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

答案 3 :(得分:1)

如果数组是对象数组,则可以

const arr = [{
    name: 'Robert',
    age: 26
  },
  {
    name: 'Joshua',
    age: 69
  }
]

Array.prototype.pushUniquely = function (item) {
  const key = 'name';
  const index = this.findIndex(i => i[key] === item[key]);
  if (index === -1) this.push(item);
}

arr.pushUniquely({
  name: 'Robert',
  age: 24
});

console.log(arr);

如果只是一个字符串或数字数组,则可以执行以下操作:

Array.prototype.pushUniquely = function (item) {
    if (!this.includes(item)) this.push(item);
}