我有一个数组:
let array = ['yay', 'yay', 'yay', 'opps', 'yay', 'yay', 'opps', 'opps', 'opps'];
如果我需要它,我该如何过滤这个数组:
let filterArray = [['yay', 3] ['opps', 1], ['yay', 2], ['opps' 3]];
谢谢。
答案 0 :(得分:5)
您可以使用Array.reduce
方法迭代原始数组并创建新数组。
acc
(累积数组)为空,请按数组中的[curr, 1]
(当前变量和计数)acc
(累积数组)最后推送索引包含curr
变量,则更新计数acc
(累积数组)上次推送的索引不包含curr
变量,请在[curr, 1]
中推送acc
。
let array = ['yay', 'yay', 'yay', 'opps', 'yay', 'yay', 'opps', 'opps', 'opps'];
let modifiedArray = array.reduce((acc, curr) => {
if (!acc.length) {
acc.push([curr, 1]);
} else {
let lastPushedArray = acc[acc.length-1];
if (lastPushedArray[0] === curr) {
acc[acc.length-1][1]++;
} else {
acc.push([curr, 1]);
}
}
return acc;
}, []);
console.log(modifiedArray);
答案 1 :(得分:2)
您可以通过检查临时结果集的最后一个元素来减少数组。
var array = ['yay', 'yay', 'yay', 'opps', 'yay', 'yay', 'opps', 'opps', 'opps'],
result = array.reduce((r, v) => {
var last = r[r.length - 1];
if (last && last[0] === v) {
last[1]++;
} else {
r.push([v, 1]);
}
return r;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:2)
使用reduce
arr.reduce( (a,c) => {
var lastValue = (a[a.length - 1] || [])[0]; //find last item in accumulator a
c == lastValue ? a[a.length - 1][1]++ : a.push([c,1]); //if last value is same then increase count, else add new item
return a;
} ,[]) //initialize accumulator a to empty array
<强>演示强>
var arr = ['yay', 'yay', 'yay', 'opps', 'yay', 'yay', 'opps', 'opps', 'opps'];
var output = arr.reduce( (a,c) => {
var lastValue = (a[a.length - 1] || [])[0];
c == lastValue ? a[a.length - 1][1]++ : a.push([c,1]);
return a;
} ,[]);
console.log( output );
答案 3 :(得分:0)
尝试以下代码。这不会给你准确的输出。但您可以按照以下方法生成所需的输出。
var array = ['yay', 'yay', 'yay', 'opps', 'yay', 'yay', 'opps', 'opps', 'opps'];
var newArray = {};
array.map( function (a) { if (a in newArray) newArray[a] ++; else newArray[a] = 1; } );
console.log(newArray);
输出
{yay:5,opps:3}
答案 4 :(得分:0)
又一个解决方案:
let array = ['yay', 'yay', 'yay', 'opps', 'yay', 'yay', 'opps', 'opps', 'opps'];
let rs = {};
array.forEach((w) => rs[w] == undefined ? rs[w] = 1 : rs[w] += 1);
let result = Object.keys(rs).map((key) => [key, rs[key]]);
console.log(result);
&#13;
答案 5 :(得分:0)
您可以使用*ngFor
对数组中的相似单词进行分组,并重复单词增量计数。
array#reduce
答案 6 :(得分:0)
您可以使用:
let filterArray = array.reduce((acc, item) => {
let similarItemIndex = acc.findIndex(i => i[0] === item);
if (similarItemIndex > -1) {
acc.push([item, 1]);
} else {
acc[similarItemIndex] = [item, acc[similarItemIndex][0] + 1];
}
return acc;
}, []);