如何使用JavaScript在数组中查找非重复数字?

时间:2018-06-14 10:00:13

标签: javascript arrays

亲爱的所有我正在尝试使用javascript在数组中找到非重复值。我已经编写了一些代码但它无法正常工作..你们可以告诉我问题在哪里。谢谢。

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())

9 个答案:

答案 0 :(得分:2)

此解决方案可能有更整洁的方法,但这可以通过过滤数组并将其当前值与数组项本身(期望当前项的索引值)进行比较来达到预期效果。

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))

答案 1 :(得分:0)

您可以先使用reduce为每个数字元素获取一个包含count的对象,然后在filter上使用Object.keys返回非重复数字的数组。

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)

答案 2 :(得分:0)

根据OP请求仅过滤唯一元素:

根据要求使用for循环。它返回一个只包含在原始数组中出现一次的元素的数组。

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++) {
    for (var j=0 ; j < n; j++)
      if (i!=j && arr[i]==arr[j])
        break;
    if(j==n)
        result.push(arr[i]);
  }
  return result;
}
console.log(nonrep())

答案 3 :(得分:0)

您可以使用filterindexOf

console.log(
  [-1, 2, 5, 6, 2, 9, -1, 6, 5, -1, 3].filter((v, i, a) => a.indexOf(v, i + 1) === -1 )
);

答案 4 :(得分:0)

一些变化:

  • 移动函数内的所有变量声明。
  • 对移交数组使用函数参数,保持函数纯净。
  • 事先在函数顶部声明所有需要的变量。
  • 将数组作为结果数组unique
  • 检查ij,如果等于continue(内部)循环。
  • 检查ij处的值并退出(内部)循环,因为找到了重复项。
  • 在内部循环结束时进行检查,并使用数组j的长度检查索引l,如果相等则将值推送到unique
  • 在外部循环的末尾使用带有return数组的单个unique语句。

&#13;
&#13;
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]));
&#13;
&#13;
&#13;

另一种解决方案可能是检查indexOflastIndexOf是否返回相同的值。然后你找到了一个独特的价值。

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 5 :(得分:0)

var arr1 = [45, 4,16,25,45,4,16, 9,7, 16, 25];
 var arr=arr1.sort();
  console.log(arr);
 var str=[];
 arr.filter(function(value){

if( arr.indexOf(value) === arr.lastIndexOf(value))
{ str.push(value);
console.log("ntttttttttttttnnn" +str)

}// how this works ===============A
 })

O / P

 7,9

答案 6 :(得分:0)

Please try the below code snippet.

var arr = [-1, 2, 5, 6, 2, 9, -1, 6, 5, -1, 3];
    var uniqArr = [];
    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){
          uniqArr.push(arr[i])
        } 
      }
    }

    console.log(uniqArr)

答案 7 :(得分:0)

此ES6代码对我有用:

a.map(c => a.filter(b => c == b))。filter(e => e.length <2).reduce((total,cur)=> total.concat(cur ),[])

答案 8 :(得分:0)

这是带有循环的有效方法。

<form name="form" action="<%=request.getContextPath()%>/register" method="post">

        <div class="container">
            <div class="left">
                <div class="header">
                    <h2 class="animation a1">Register now</h2>
                    <h4 class="animation a2">Enter information in field and create account!</h4>
                </div>
                <div class="form">
                    <input type="text" name="firstName" class="form-field animation a3" placeholder="Name...">
                    <input type="text" name="lastName" class="form-field animation a3" placeholder="Last name...">
                    <input type="email" name="email" class="form-field animation a3" placeholder="Email adress...">
                    <input type="password" name="password" class="form-field animation a4" placeholder="Password">
                    <button class="animation a6" value="Submit" type="submit">REGISTER</button>
                </div>
            </div>
            <div class="right"></div>
        </div>
    </form>