亲爱的,我试着用javascript在数组中找到非重复值,我已经编写了一些代码,但是它不能正常工作,..can,你们告诉我problem.thanks在哪里。
var arr = [-1, 2, 5, 6, 2, 9, -1, 6, 5, -1, 3];
var n = arr.length;
var result = '';
function nonrep() {
for (var i = 0; i < n; i++) {
var j;
for (j = 0; j < n; j++)
if (i != j && arr[i] == arr[j]) {
result = arr[i];
break;
}
if (j == n)
return arr[i];
}
return result;
}
console.log(nonrep())
发布于 2020-08-12 16:53:22
对于这个解决方案,可能有一种更简洁的方法,但是通过过滤数组并将其当前值与数组项本身(expect current item的索引值)进行比较,可以实现预期的效果。
const sampleArray = [1,2,3,7,2,1,3];
const getNonDuplicatedValues = (arr) =>
arr.filter((item,index) => {
arr.splice(index,1)
const unique = !arr.includes(item)
arr.splice(index,0,item)
return unique
})
console.log("Non duplicated values: " , ...getNonDuplicatedValues(sampleArray))
发布于 2018-06-14 10:16:50
一些变化:
unique。i和j,如果等于continue (内)循环。i和j的值并退出(内部)循环,因为找到了一个重复的循环。j和数组l的长度,如果相同,则将值推送到unique。return数组的unique语句。
function getUnique(array) {
var l = array.length,
i, j,
unique = [];
for (i = 0; i < l; i++) {
for (j = 0; j < l; j++) {
if (i === j) {
continue;
}
if (array[i] === array[j]) {
break;
}
}
if (j === l) {
unique.push(array[i]);
}
}
return unique;
}
console.log(getUnique([-1, 2, 5, 6, 2, 9, -1, 6, 5, -1, 3]));
另一种解决方案可能是检查indexOf和lastIndexOf是否返回相同的值。然后你找到了一个独特的价值。
var array = [-1, 2, 5, 6, 2, 9, -1, 6, 5, -1, 3],
unique = array.filter((v, i) => array.indexOf(v) === array.lastIndexOf(v));
console.log(unique);
发布于 2018-06-14 10:07:42
您可以首先使用reduce获取一个对象,并对每个number元素进行计数,然后在Object.keys上使用filter返回非重复数字数组。
var arr=[-1,2,5,6,2,9,-1,6,5,-1,3];
var obj = arr.reduce((r, e) => (r[e] = (r[e] || 0) + 1, r), {});
var uniq = Object.keys(obj).filter(e => obj[e] == 1).map(Number)
console.log(uniq)
有for循环的解决方案。
var arr = [-1, 2, 5, 6, 2, 9, -1, 6, 5, -1, 3];
var uniq = [];
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length; j++) {
if (arr[i] == arr[j] && i != j) break;
else if (j == arr.length - 1) uniq.push(arr[i])
}
}
console.log(uniq)
https://stackoverflow.com/questions/50854750
复制相似问题