我试图仅从数组中删除2之一,但是我的代码删除了所有这些。我的代码如下:
var arr = [2,7,9,5,2]
arr.filter(item => ((item !== 2)));
和:
var arr = [2,7,9,2,2,5,2]
arr.filter(item => ((item !== 2)));
两个都删除。我考虑过删除重复项,如果只有一个重复项,则可以删除重复项-例如:
Array.from(new Set([2,7,9,5,2]));
function uniq(a) {
return Array.from(new Set(a))
}
但是如果有多个重复项会失败,因为它会删除所有重复项,包括任何其他重复的数字:
Array.from(new Set([2,7,9,9,2,2,5,2]));
function uniq(a) {
return Array.from(new Set(a))
}
有人知道如何只删除2个之一吗?感谢您的帮助。
答案 0 :(得分:3)
您可以将indexOf
方法与splice
结合使用。
var arr = [2,7,9,5,2]
var idx = arr.indexOf(2)
if (idx >= 0) {
arr.splice(idx, 1);
}
console.log(arr);
答案 1 :(得分:2)
您可以使用计数器关闭并仅删除第一个2
。
var array = [2, 7, 9, 2, 3, 2, 5, 2],
result = array.filter((i => v => v !== 2 || --i)(1));
console.log(result);
对于其他2
,您可以调整递减的起始值。
var array = [2, 7, 9, 2, 3, 2, 5, 2],
result = array.filter((i => v => v !== 2 || --i)(2));
console.log(result);
答案 2 :(得分:1)
有多种方法可以做到这一点;一种相对简单的方法是使用indexOf
;看到另一篇文章:https://stackoverflow.com/a/5767357/679240
var array = [2, 7, 9, 5, 2];
console.log(array)
var index = array.indexOf(2);
if (index > -1) {
array.splice(index, 1);
}
// array = [7, 9, 5, 2]
console.log(array);
答案 3 :(得分:1)
您可以这样做:
const arr = [2, 7, 9, 2, 2, 5, 2];
const result = arr
.reduce((a, c) => {
a.temp[c] = ++a.temp[c] || 1;
if (a.temp[c] !== 2) {
a.array.push(c);
}
return a;
}, {temp: {}, array: []})
.array;
console.log(result);
答案 4 :(得分:1)
您可以按照以下方法
var arr= [2,3,4,2,4,5];
var unique = [];
$.each(arr, function(i, el){
if($.inArray(el, unique) === -1) unique.push(el);
})
答案 5 :(得分:1)
从数组中过滤所有重复项的最简单方法:
arr.filter((item, position) => arr.indexOf(item) === position)
如果另一个具有相同值的元素已经存在,则此方法跳过元素。
如果您只需要过滤第一个重复项,则可以使用其他bool键:
arr.filter((item, position) => {
if (!already && arr.indexOf(item) !== position) {
already = true
return false
} else return true
})
但是此方法开销很大。最聪明的方法是使用for
循环:
for (let i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) !== i) {
arr.splice(i,1);
break;
}
}