【问题标题】:Array Compare and get count数组比较并获取计数
【发布时间】:2015-03-23 13:31:33
【问题描述】:

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

    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 }]

任何人都可以有这个想法吗?

【问题讨论】:

  • 取值的可能性很小。 1.数组值与同一个数组重复。 2. 数组值重复到其他数组。
  • 你想得到一个字母的索引还是它在数组中出现的次数?
  • fruits1, fruits2, fruits3?您应该首先构建一个fruits 数组。
  • 计算重复值的数量,并按顺序显示对象。 (像这样排在首位的是哪一个)
  • @RSKMR:为什么需要这样的输出格式?是否需要完全那样,或者可以稍微改变格式以使其更容易访问?

标签: javascript jquery arrays object


【解决方案1】:

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

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);
&lt;div id="output"&gt;&lt;/div&gt;

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

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

Object.keys(cnt).forEach 循环将cnt 键推送到output 数组中。

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

【讨论】:

    【解决方案2】:

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

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

    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

    【讨论】:

    • 不错。可以显示顺序吗?我需要按顺序显示(哪个最重要)。
    猜你喜欢
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多