我的输入是一个像这样的数组:[7, 7, 7, 7, 4, 4, 5, 5, 5, 1, 9, 2, 7, 7]
我想将数字组合在一起并将它们相加,但要按邻居,而不是按数组中的总数。所以输出将是:['7:4', '4:2', '5:3', 1, 9, 2, '7:2']
我尝试了几种不同的方法,使用 reduce
, 并接近但使用内置的 Javascript 方法我最终计算了数组中的 ALL,而不是邻居。
const firstArray = [7, 7, 7, 7, 4, 4, 5, 5, 5, 1, 9, 2, 7, 7];
const masterArray = [];
const unique = new Set (numberArray); // Set {7, 4, 5, 1, 9, 2, 7}
unique.forEach(u => {
masterArray.push(numberArray.filter(e => e === u));
});
console.log(masterArray);
Set 在这里使用显然是错误的,因为它会获取唯一值并计算它们,但我只想通过邻居来做。那么我想我应该使用 reduce
但我遇到了同样的问题。
最佳答案
var test = [7, 7, 7, 7, 4, 4, 5, 5, 5, 1, 9, 2, 7, 7];
console.log(
test.reduce((acc, element) => {
if (acc.length && acc[acc.length - 1].key == element) {
acc[acc.length - 1].count++;
} else {
acc.push({ key: element, count: 1 });
}
return acc;
}, []).map(element => `${element.key}:${element.count}`)
);
所以逻辑首先将数字减少到一个数组,跟踪最后一个键和计数。只要 key 相同,计数就会增加。一旦 key 发生变化,就会推送一个新对象以开始下一次运行。在reduce完成后,会执行一个map来将key和counts转换成想要的字符串。
关于javascript - 如何使用Javascript计算数组中的相邻数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65131632/