检查的数组,如果我有三个相同的价值观,不知道价值[复制]

问题描述 投票:0回答:4

这个问题已经在这里有一个答案:

我有一个随机数的数组,从1到6我怎样才能知道我是否有这个阵列中的两个,三个或四个相同的数字吗?什么是多少?或者,如果我有两个数字,它们出现了两次?

array = [1, 3, 5, 5, 6];    

x = array[0];
repetitions = 0;

for (let i = 0; i < 5; i++) {
const y = array[i];

if (x === y) {
    repetitions++;
  }
} 

我应该为阵列中的每个元素做这样的事情?

谢谢!

javascript angular typescript
4个回答
4
投票

这是可以使用过滤器来提供一个简单的解决方案;

var array = [1,2, 3,4,4,4,4,4,4,4, 5, 5, 6,6,6];
var duplicate = [];
var newArray = array.filter((v, i) =>{ 
 if(array.indexOf(v) == i){
  return v
}else{
  duplicate.indexOf(v) == -1 ? duplicate.push(v):'';
}
})

console.log(`new array ${newArray}`);
console.log(`Duplicate values array ${duplicate}`);

1
投票

还有一些你应该明确的限制。例如,这将代码返回被复制的阵列中的第一个数字:

let duplicated = [...array] // makes a copy of the array
                   .sort()  // since `sort` mutate the original
                   .find((item, index, arr) => value === arr[index + 1]);

console.log(duplicated) // 5, in your case

如果没有数字重复,那么它将返回undefined

但是,也许这是不是你想要的。考虑到这阵:[1, 3, 6, 5, 5, 6, 6, 6]。即使有也6复制,你将总是返回5

如果你只想知道至少有一个号码被复制,上面的代码将作品。如果你想知道所有的复制数量,并在其中为了他们第一次出现在原始数组中,你需要的东西不同。例如:

let array = [1, 3, 6, 5, 5, 6, 6, 6];
let occurrences = array
                    .reduce((acc, value) => (acc[value]=-~acc[value], acc),{});

console.log(occurrences); // {"1": 1, "3": 1, "5": 2, "6": 4}

在这一点上,你可以决定你要使用此数据,例如做什么你可以滤除出现的数组中只有一次的数字:

console.log(
  Object.fromEntries(
    Object.entries(occurrences).filter(([num, count]) => count > 1)
  )
); // {"5": 2, "6": 4}

等等

UPDATE(见注释):Object.fromEntries是最近推出的,万一具有所有出现一个过滤的对象的方法是目标,在这种情况下可以通过这样的功能可以容易地更换:

const fromEntries = entries => 
  entries.reduce((acc, [key, value]) => (acc[key] = value, acc), {});

0
投票

您是否在数组中的值存在超过2倍比较indexOflastIndexOf

function duplicates(arr){
  let result = []
  arr.forEach(item => {
    if(arr.indexOf(item) !== arr.lastIndexOf(item)){
      result.push(item)
    }
  })
  return [... new Set(result)];
}
console.log(duplicates([1,2,3,5,5,6,6,6]));

0
投票

你可以采取一个qazxsw POI和计数的值的所有事件。

其结果是一个阵列,其中所述第一元件是所述值和所述第二个是值的计数。

Map
var array = [1, 3, 5, 5, 6],
    counts = Array.from(array.reduce((m, v) => m.set(v, (m.get(v) || 0) + 1), new Map));
    
console.log(counts);
© www.soinside.com 2019 - 2024. All rights reserved.