Javascript 删除重复项并在y轴中仅计数一个
如何删除重复项,以便只显示计数为1的唯一标签 我的价值观在哪里 像 我需要的最终输出是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"},
[
{ 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);