删除重复并仅计算y:轴中的一个

时间:2015-06-08 12:28:15

标签: javascript

如何删除Duplicate以便显示只有1s的唯一标签。

我的价值观

[
  {"y":2,"label":"Adnim"},
  {"y":2,"label":"Adnim"},
  {"y":0,"label":"Adnim"},
  {"y":0,"label":"Adnim"},
  {"y":2,"label":"Adnim2"},
  {"y":2,"label":"Adnim2"},
  {"y":2,"label":"Adnim2"},
  {"y":0,"label":"Adnim2"},
]

我需要的最终输出是

 [
  { y: 2 ,  label: 'Adnim' },
 {y: 3 ,  label: 'Adnim2'},
] 

忽略“0”只计算“1”并单独显示

仅供参考:标签价值将会改变

4 个答案:

答案 0 :(得分:2)

我希望我能正确理解你。该程序查找每个label的出现次数,并将其放入相应的y字段。

var list = [
  {"y":2,"label":"Adnim"},
  {"y":2,"label":"Adnim"},
  {"y":0,"label":"Adnim"},
  {"y":0,"label":"Adnim"},
  {"y":2,"label":"Adnim2"},
  {"y":2,"label":"Adnim2"},
  {"y":2,"label":"Adnim2"},
  {"y":0,"label":"Adnim2"},
]

var counters = {}
var result = [];
var label;

list.forEach(function(el){
    label = el.label;
    // Skip zero y's
    if (el.y === 0) return;

    // Increase counter values
    if (counters.hasOwnProperty(label)) {
        counters[label] += 1;
    } else {
        counters[label] = 1;
    }
});

// Convert counters object to array of objects
for (var label in counters) {
    result.push({'label': label, 'y': counters[label]});
}

结果是:

[{"label":"Adnim","y":2},{"label":"Adnim2","y":3}]

答案 1 :(得分:1)

我感谢Anton Melnikov提出以下解决方案。谢谢Buddy。

HTML:

<div id="target"></div>

使用Javascript:

    var list = [
  {y:0,label:'Adnim'},
   {y:0,label:'Adnim'},
    {y:0,label:'Adnim'},
    {y:1,label:'Adnim'},
  {y:0,label:'Adnim2'},
 {y:0,label:'Adnim2'},
   {y:1,label:'Adnim2'},
  {y:1,label:'Adnim2'},
]

var counters = {}
var result = [];
var resultString = '';
var label;

list.forEach(function(el){
    label = el.label;
    // Skip zero y's
    if (el.y === 0) return;

    // Increase counter values
    if (counters.hasOwnProperty(label)) {
        counters[label] += 1;
    } else {
        counters[label] = 1;
    }
});

// Convert counters object to array of objects
for (var label in counters) {
    result.push({'label': label, 'y': counters[label]});
}

// Render result to the target div
console.log(result);

result = result.map(function(el){ return '{y: ' + el.y + ', label: "' + el.label + '"}' });
resultString = '[' + result.join(', ') + ']';
$('#target').html(resultString);

答案 2 :(得分:0)

一个不错的选择是使用lodash库,其中包含唯一

的功能

以下是将其用于解决问题的方法:

var objectArray = [
  {"y":2,"label":"Adnim"},
  {"y":2,"label":"Adnim"},
  {"y":0,"label":"Adnim"},
  {"y":0,"label":"Adnim"},
  {"y":2,"label":"Adnim2"},
  {"y":2,"label":"Adnim2"},
  {"y":2,"label":"Adnim2"},
  {"y":0,"label":"Adnim2"},
],
uniquesObjects = _.uniq(objectArray, 'y');

输出:

[{y: 2, label: 'Adnim'},{y: 0, label: 'Adnim2'}] 

答案 3 :(得分:0)

或者,您可以使用纯JavaScript解决方案:

function uniques(objectArray, key){
  var uniques = {}, values = [];
  objectArray.forEach(function(obj){
    if (!uniques[obj[key]]){
      values.push(obj);
    }
    uniques[obj[key]] = obj;
  });
  return values;
}

var objectArray = [
  {"y":2,"label":"Adnim"},
  {"y":2,"label":"Adnim"},
  {"y":0,"label":"Adnim"},
  {"y":0,"label":"Adnim"},
  {"y":2,"label":"Adnim2"},
  {"y":2,"label":"Adnim2"},
  {"y":2,"label":"Adnim2"},
  {"y":0,"label":"Adnim2"},
],
uniquesObjects = uniques(objectArray, 'y');

输出

[{y: 2, label: 'Adnim'},{y: 0, label: 'Adnim2'}]