Javascript 唯一JSON值数组
我试图根据键值的比较来获得一个唯一JSON数据数组 在本例中,我试图删除所有具有重复Javascript 唯一JSON值数组,javascript,Javascript,我试图根据键值的比较来获得一个唯一JSON数据数组 在本例中,我试图删除所有具有重复category值的对象 例如: var products = [ { category: 'fos', name: 'retek' }, { category: 'fos', name: 'item' }, { category: 'nyedva', name: 'blabla' }, { category: 'fos', name: 'gihi
category
值的对象
例如:
var products = [
{ category: 'fos', name: 'retek' },
{ category: 'fos', name: 'item' },
{ category: 'nyedva', name: 'blabla' },
{ category: 'fos', name: 'gihi' }
];
// array of hold unique values
var uniqueNames = [];
for(i = 0; i< products.length; i++){
if(uniqueNames.indexOf(products[i].category) === -1){
uniqueNames.push(products[i]);
}
}
var产品=[
{类别:'fos',名称:'retek'},
{类别:'fos',名称:'item'},
{类别:'nyedva',名称:'blabla'},
{类别:'fos',名称:'gihi'}
];
//保持唯一值的数组
var uniqueNames=[];
对于(i=0;i
我试图将没有重复类别值的任何对象推送到数组中。这里是现场直播
请帮忙 开关
for(i = 0; i< products.length; i++){
if(uniqueNames.indexOf(products[i].category) === -1){
uniqueNames.push(products[i]);
}
}
当我尝试这样做时,我通常将所有值作为键放入地图中,因为地图数据结构只允许唯一键。因此,对于这种情况:
var crops = [ {
id: 0023,
crop: "corn"
},
{
id: 0034,
crop: "corn"
},
{
id: 0222,
crop: "wheat"
}
];
var cropsMap = {};
for(var i = 0; i < crops.length; i++) {
cropsMap[crops[i].crop] = true;
}
var uniqueCrops = Object.keys(cropsMap);
var-crops=[{
id:0023,
作物:“玉米”
},
{
id:0034,
作物:“玉米”
},
{
id:0222,
作物:“小麦”
}
];
var cropsMap={};
对于(变量i=0;i
如果你想查看的话,我做了一个测试。有几种方法可以做到这一点,这是其中之一:遍历所有项目,并过滤掉我们已经添加到该类别中的项目。为此,我们使用一个对象来保留我们看到的类别和新类别,因此我们只过滤看到的类别:
lookup = [];
for (var product, i = 0; product = products[i++];) {
var cat = item.category;
if (!(cat in lookup)) {
lookup[cat] = 1;
result.push(products[cat]);
}
}
var seen = {}
var unique = products.filter(function(item){
if(seen.hasOwnProperty(item.category)){
return false;
}else{
seen[item.category] = true;
return true;
}
})
console.log(unique); // only 2 objects
indexOf检查uniqueNames在数组中是否已经有该类别,但是当您推送整个对象而不是类别时,它将永远找不到它,并且总是将所有对象推送到array@Kyle所以uniqueNames应该只包含
{category:'fos',name:'retek'},{category:'nyedva',name:'blablabla'}
?@Moogs Yes,它应该只包含这两个对象,请考虑编辑你的答案,包括解释你的代码是如何工作的。
lookup = [];
for (var product, i = 0; product = products[i++];) {
var cat = item.category;
if (!(cat in lookup)) {
lookup[cat] = 1;
result.push(products[cat]);
}
}
var seen = {}
var unique = products.filter(function(item){
if(seen.hasOwnProperty(item.category)){
return false;
}else{
seen[item.category] = true;
return true;
}
})
console.log(unique); // only 2 objects