是否有任何方法可以通过 ES6 用1种方法将对象唯一地推送到数组?
MyArray.pushUniquely(x);
MyMethod(x) {
if ( MyArray.IndexOf(x) === -1 )
MyArray.Push(x);
}
ES6是否有任何方法可以唯一推送?
答案 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);
}