Javascript 仅从阵列中删除一个副本
我试图只从数组中删除其中一个2,但我的代码删除了所有2。我的代码如下:Javascript 仅从阵列中删除一个副本,javascript,Javascript,我试图只从数组中删除其中一个2,但我的代码删除了所有2。我的代码如下: var arr = [2,7,9,5,2] arr.filter(item => ((item !== 2))); 以及: 两个都拆下所有2。我考虑过删除重复项,如果只有一个重复项,则可以删除重复项-例如: Array.from(new Set([2,7,9,5,2])); function uniq(a) { return Array.from(new Set(a)) } 但如果存在多个重复项,则会失败,因为
var arr = [2,7,9,5,2]
arr.filter(item => ((item !== 2)));
以及:
两个都拆下所有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吗?感谢您的帮助。有多种方法可以做到这一点;一个相对简单的方法是使用
indexOf
;请参阅其他帖子:
var数组=[2,7,9,5,2];
console.log(数组)
var-index=array.indexOf(2);
如果(索引>-1){
阵列拼接(索引1);
}
//数组=[7,9,5,2]
console.log(数组)代码>您可以执行以下操作:
const arr=[2,7,9,2,2,5,2];
const result=arr
.减少((a,c)=>{
a、 温度[c]=++a.temp[c]| 1;
如果(a.temp[c]!==2){
a、 推送(c);
}
返回a;
},{temp:{},数组:[]})
.阵列;
控制台日志(结果)
您可以将indexOf
方法与splice
结合使用
var arr=[2,7,9,5,2]
var idx=arr.indexOf(2)
如果(idx>=0){
阵列拼接(idx,1);
}
控制台日志(arr)
您可以使用计数器进行关闭,并仅移除第一个2
var数组=[2,7,9,2,3,2,5,2],
result=array.filter((i=>v=>v!==2 | |--i)(1));
控制台日志(结果)代码>您可以遵循以下方法
var arr= [2,3,4,2,4,5];
var unique = [];
$.each(arr, function(i, el){
if($.inArray(el, unique) === -1) unique.push(el);
})
筛选阵列中所有重复项的最简单方法:
arr.filter((item, position) => arr.indexOf(item) === position)
如果已经存在具有相同值的另一个元素,则此方法跳过该元素
如果只需要筛选第一个重复项,则可以使用其他布尔键:
arr.filter((item, position) => {
if (!already && arr.indexOf(item) !== position) {
already = true
return false
} else return true
})
但这种方法已经过热。最聪明的方法是使用进行循环:
for (let i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) !== i) {
arr.splice(i,1);
break;
}
}
for(设i=0;i
找到值为2的索引时,创建一个简单的循环:.splice(idx,1)
此索引和断开
循环要删除哪一个?Close的第一个2
,或最后一个,或…可能的重复项,但如果数组中不存在该数字,它将无法正常工作;检查indexOf
是否为非负将使其更加健壮。有趣的答案。v和(1)和(2)代表什么?我是JS新手,以前从未见过这种语法-你能链接到我能读到的任何东西来学习吗?一个是删除第一个出现的2
,第二个出现两个,依此类推。它可以工作,因为数字会递减,如果为零,则值会被过滤掉。该技术的名称是带有IIFE(立即调用的函数表达式)的闭包。
for (let i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) !== i) {
arr.splice(i,1);
break;
}
}