Javascript 删除重复项并在y轴中仅计数一个

Javascript 删除重复项并在y轴中仅计数一个,javascript,Javascript,如何删除重复项,以便只显示计数为1的唯一标签 我的价值观在哪里 像 我需要的最终输出是 [ { y: 2 , label: 'Adnim' }, {y: 3 , label: 'Adnim2'}, ] 忽略“0”只需计算“1”并唯一显示 仅供参考:标签值将发生变化我希望我正确理解了您的意思。此程序查找每个标签的出现次数,并将其放入相应的y字段 var list = [ {"y":2,"label":"Adnim"}, {"y":2,"label":"Adnim"},

如何删除重复项,以便只显示计数为1的唯一标签

我的价值观在哪里

我需要的最终输出是

 [
  { y: 2 ,  label: 'Adnim' },
 {y: 3 ,  label: 'Adnim2'},
] 
忽略“0”只需计算“1”并唯一显示


仅供参考:标签值将发生变化

我希望我正确理解了您的意思。此程序查找每个
标签的出现次数
,并将其放入相应的
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}]
一个好的选择是使用库,它包含函数unique

以下是解决问题的方法:

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

或者,您可以使用纯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'}] 

我感谢安东·梅尔尼科夫提出以下解决方案。谢谢你,伙计

HTML:


嘿,Shaik,你是否已经尝试循环你的数组并将不同的值推送到另一个数组中?@A1rPun否我没有听说你没有使用jQuery,然后使用prototype扩展数组以添加你的自定义函数?我正在使用,但无法删除重复项和count@AnilKumar我没有得到你…(为什么Admin2的值是“0”我也希望如此,你能用一个div@Shaik对不起,你什么意思?!说真的,兄弟,没有冒犯的意思,但你应该努力学习英语。对不起,关于语言,我想检查一下,你是否可以用“div”发布相同的解决方案,原因是,当我在JSFIDLE中复制粘贴您的解决方案以检查输出时,我没有得到输出。我想通知您,您提供的解决方案符合我的要求。但是如果我可以生成一个输出,那就太好了……啊,现在我得到了!好的,请稍等片刻。
[{y: 2, label: 'Adnim'},{y: 0, label: 'Adnim2'}] 
<div id="target"></div>
    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);