首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >打印前2个非重复数字javascript

打印前2个非重复数字javascript
EN

Stack Overflow用户
提问于 2019-07-21 21:13:47
回答 3查看 67关注 0票数 0

我在一个javascript测试中遇到了这个问题,我需要打印前两个非重复的数字,下面是我的部分尝试。

代码语言:javascript
复制
var list = [5, 23, 23, 5, 66, 3, 23, 7, 3, 0];


var locObj = {};
var count = 1;

for(var i =0; i< list.length; i++){
  if(!(list[i] in locObj))
  locObj[list[i]] = 1;
  else
    locObj[list[i]] = count++;
}

console.log(locObj);//has an object with value as 1 if its non duplicate and the number of occurrences in the case of duplicate values.

我可以进一步遍历locObj并确定谁的值等于1,然后打印2个值。但是由于javascript键没有被排序,所以我无法打印66和7,这是预期的输出。如何解决?感谢任何其他更好的解决问题的方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-21 21:21:22

您可以首先将数字映射为键,将重复映射为值,然后在数组上再次循环,并在映射对象上选择值为1的前两个数字

代码语言:javascript
复制
var list = [5, 23, 23, 5, 66, 3, 23, 7, 3, 0];

let mapping = list.reduce((op,inp)=>{
  op[inp] = op[inp] || 0
  op[inp]++
  return op
},{})

let firstTwo = []

list.forEach(v=> {
  if(mapping[v] === 1 && firstTwo.length < 2){
    firstTwo.push(v)
  }
})

console.log(firstTwo);

票数 1
EN

Stack Overflow用户

发布于 2019-07-21 21:18:49

我将使用一个Map,它的迭代方法(这里是entries())按插入顺序迭代。将计数加到Map中,类似于您正在做的操作,然后获取Map的条目,根据计数为1的条目进行过滤,然后进行切片以获得前两个条目:

代码语言:javascript
复制
var list = [5, 23, 23, 5, 66, 3, 23, 7, 3, 0];
const countByNum = new Map();
list.forEach((num) => {
  countByNum.set(num, (countByNum.get(num) || 0) + 1);
});
const firstTwoNonDupes = [...countByNum.entries()]
  .filter(([, count]) => count === 1)
  .slice(0, 2)
  .map(([num]) => num);
console.log(firstTwoNonDupes);

票数 2
EN

Stack Overflow用户

发布于 2019-07-22 00:21:53

您可以采用MapSet的组合,其中映射只存储已见的值,并将其作为可见的值的结果集。

代码语言:javascript
复制
function getFirstTwoNonDuplicateValues(array) {
    var map = new Map,
        result = new Set,
        value;
    
    for (value of array) map.set(value, map.has(value)
        ? result.delete(value)
        : result.add(value));
    
    return [...result].slice(0, 2);
}

console.log(getFirstTwoNonDuplicateValues([5, 23, 23, 5, 66, 3, 23, 7, 3, 0]));

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57133559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档