数组比较并获取计数

Array Compare and get count

我是新手。我有多个数组列表:

    var fruits1 = ["A", "B", "C", "D"];
    var fruits2 = ["O", "E", "F", "G"];
    var fruits3 = ["S", "D", "E", "S"];
    var fruits4 = ["A", "B", "Z", "A"];
    var fruits5 = ["A", "R", "U", "V"];
    var fruits6 = ["N", "B", "O", "M"];
    var fruits7 = ["A", "B", "N", "P"];
    var fruits8 = ["X", "C", "Z", "Z"];
    var fruits9 = ["X", "B", "X", "B"];

有如下次数的数组。

    A - 5
    B - 6
    C - 2
    D - 2
    E - 2
    F - 1
    G - 1
    M - 1
    N - 2
    O - 2
    P - 1
    R - 1
    S - 2
    U - 1
    V - 1
    X - 3
    Z - 3

使用javascript/jquery

需要这样的输出
[{"B" : 6}, { "A" : 5}, {"X":3}, {"Z" : 3}, {"C" : 2}, { "D" : 2}, { "E" : 2}, { "N" : 2}, { "O" :2}, { "S" : 2}, { "F": 1 }, { "G" :1}, { "M" :1}, { "P" :1}, { "R" :1}, { "U" :1}, { "V" :1 }]

任何人都可以这样做吗?

我建议你只有所有水果的数组,然后使用下面的映射-

即在你的情况下,我将数组合并为一个-

var fruits = ["A", "B", "C", "D","O", "E", "F", "G","S", "D", "E", "S","A", "B", "Z", "A","A", "R", "U", "V","N", "B", "O", "M","A", "B", "N", "P","X", "C", "Z", "Z","X", "B", "X", "B"];

然后-

var counts = {};

for(var i = 0; i< fruits.length; i++) {
    var fruit = fruits[i];
    counts[fruit] = counts[fruit] ? counts[fruit]+1 : 1;

}

Demo

我可能想多了,但这是我想出的:

var fruits1 = ["A", "B", "C", "D"],
    fruits2 = ["O", "E", "F", "G"],
    fruits3 = ["S", "D", "E", "S"],
    fruits4 = ["A", "B", "Z", "A"],
    fruits5 = ["A", "R", "U", "V"],
    fruits6 = ["N", "B", "O", "M"],
    fruits7 = ["A", "B", "N", "P"],
    fruits8 = ["X", "C", "Z", "Z"],
    fruits9 = ["X", "B", "X", "B"],
    fruits= [].concat(fruits1, fruits2, fruits3, fruits4, fruits5, fruits6, fruits7, fruits8, fruits9),
    cnt= {},
    output= [];

fruits.forEach(function(val) {
  cnt[val]= (cnt[val] || 0)+1
});

Object.keys(cnt).forEach(function(val, idx) {
  var obj= {};
  obj[val]= cnt[val];
  output.push(obj);
});

output= output.sort(function(a, b) {
  var ak= Object.keys(a)[0],
      bk= Object.keys(b)[0],
      a1= a[ak],
      b1= b[bk];
  return a1 < b1 ? 1 : a1 > b1 ? -1 : 
         ak < bk ? -1 : ak > bk ? 1 : 0;
});

document.querySelector('#output').innerHTML= JSON.stringify(output);
<div id="output"></div>

concat 函数将所有数组连接成一个名为 fruit 的数组。

fruits.forEach 循环将总水果存储在 cnt 对象中,如下所示:{"A": 5, "B": 6, "C": 2, ...}.

Object.keys(cnt).forEach 循环将 cnt 键压入 output 数组。

output.sort 函数然后对值进行排序,首先按项目数量降序,然后按关键字升序。