str_arr = [“ a”,“ a”,“ b”,“ c”,“ b”]
结果数组应为[“ a 2”,“ b 2”,“ c 1”]。
使用以下代码无法获得理想的结果。
function foo(str) {
var a = [], b = [], prev;
for ( var i = 0; i < str.length; i++ ) {
if ( str[i] !== prev ) {
a.push(str[i]);
b.push(1);
} else {
b[b.length-1]++;
}
prev = arr[i];
}
return [a, b];
}
var result = foo(str_arr);
var newA = result[0].map((e, i) => e + " " + result[1][i]+ "<br>");
答案 0 :(得分:2)
您可以带一个物体来计数物品,并且
然后返回数组。
function foo(transactions) {
var counts = {};
for (var i = 0; i < transactions.length; i++) {
counts[transactions[i]] = (counts[transactions[i]] || 0) + 1;
}
return Object
.keys(counts)
.sort((a, b) => counts[b] - counts[a] || a > b || -(a < b))
.map(k => k + ' ' + counts[k]);
}
var transactions = ["notebook", "notebook", "mouse", "keyboard", "mouse"],
result = foo(transactions);
console.log(result);
答案 1 :(得分:0)
这是一个将计数添加到数组中唯一词的函数。
通过遍历已排序的数组,这使它更老套了。
function countDistinctWords (arr) {
if (arr.length === 0) return arr;
arr = arr.sort();
let result = [];
let n = 1;
for (let i = 1; i < arr.length; i++) {
if (arr[i-1] == arr[i]) {n++}
if (arr[i-1] !== arr[i]) {
result.push(arr[i-1]+' '+n);
n=1;
}
}
result.push(arr[arr.length-1]+' '+n);
return result;
}
str_arr= ["a", "a", "b", "c", "b"];
var str_arr2 = countDistinctWords(str_arr);
console.log(str_arr2);
答案 2 :(得分:0)
无需排序。原始数组不受影响。
function group(arr) {
var hits = {}, group_arr = [];
for (var i = 0; i < arr.length; i++) hits[arr[i]] = (hits[arr[i]] || 0) + 1;
for (var hit in hits) Object.prototype.hasOwnProperty.call(hits, hit) && group_arr.push(hit + " " + hits[hit]);
return group_arr;
}
console.log(group(["a", "a", "b", "c", "b"]));