Javascript 如何从对象数组中删除重复名称
我尝试了以下方法:Javascript 如何从对象数组中删除重复名称,javascript,Javascript,我尝试了以下方法: var arr = [ {level:0,name:"greg"}, {level:0,name:"Math"}, {level:0,name:"greg"} ]; 函数移除的副本:(dataObject){ self.dataObjectArr=Object.keys(dataObject).map(函数(键){ 返回数据对象[键]; }); 对于(var i=0;i{ var k=关键(项目); return!seen.has(k)和&seen.
var arr = [
{level:0,name:"greg"},
{level:0,name:"Math"},
{level:0,name:"greg"}
];
函数移除的副本:(dataObject){
self.dataObjectArr=Object.keys(dataObject).map(函数(键){
返回数据对象[键];
});
对于(var i=0;i
但我得到的错误是:uncaughttypeerror:将循环结构转换为JSON 这里有一个通用的“uniquify”函数:
功能uniqBy(a,键){
var seen=新集合();
返回a.filter(项=>{
var k=关键(项目);
return!seen.has(k)和&seen.add(k)
});
}
///
var arr=[
{级别:0,名称:“greg”},
{级别:0,名称:“greg”},
{级别:0,名称:“joe”},
{级别:0,名称:Math},
{级别:0,名称:“greg”},
{级别:0,名称:“greg”},
{级别:0,名称:Math},
{级别:0,名称:“greg”}
];
uniq=uniqBy(arr,x=>x.name);
控制台日志(uniq)代码>这里有一个通用的“uniquify”函数:
功能uniqBy(a,键){
var seen=新集合();
返回a.filter(项=>{
var k=关键(项目);
return!seen.has(k)和&seen.add(k)
});
}
///
var arr=[
{级别:0,名称:“greg”},
{级别:0,名称:“greg”},
{级别:0,名称:“joe”},
{级别:0,名称:Math},
{级别:0,名称:“greg”},
{级别:0,名称:“greg”},
{级别:0,名称:Math},
{级别:0,名称:“greg”}
];
uniq=uniqBy(arr,x=>x.name);
控制台日志(uniq)
您应该将名称
推送到一个数组或集合中,并在下面进行检查
var-arr=[{
级别:0,
姓名:“格雷格”
}, {
级别:0,
名称:“数学”
}, {
级别:0,
姓名:“格雷格”
}]
功能移除副本(arr){
var temp=[]
返回阵列过滤器(功能(el){
if(温度索引(标高名称)<0){
温度推送(标高名称)
返回真值
}
})
}
console.log(removeDuplicates(arr))
您应该将名称
推送到一个数组或集合中,并在下面进行检查
var-arr=[{
级别:0,
姓名:“格雷格”
}, {
级别:0,
名称:“数学”
}, {
级别:0,
姓名:“格雷格”
}]
功能移除副本(arr){
var temp=[]
返回阵列过滤器(功能(el){
if(温度索引(标高名称)<0){
温度推送(标高名称)
返回真值
}
})
}
log(removeDuplicates(arr))
我相信您有一个语法错误“removeDuplicates:(dataObject){…”
应该没有“:”>>“RemovedUpplicates(dataObject){…”
"
您可以尝试以下方法:
function removeDuplicates:(dataObject){
self.dataObjectArr = Object.keys(dataObject).map(function(key){
return dataObject[key];
});
for(var i= 0; i < self.dataObjectArr.length; i++ ){
self.dataObjectArr[i]['name'] = self.dataObjectArr[i];
self.uniqArr = new Array();
for(var key in self.dataObjectArr){
self.uniqArr.push(self.dataObjectArr[key]);
}
}
self.uniqObject = DataMixin.toObject(self.uniqArr);
return self.uniqObject;
}
我相信您有一个语法错误“removeDuplicates:(dataObject){…”
应该没有“:”>>“RemovedUpplicates(dataObject){…”
"
您可以尝试以下方法:
function removeDuplicates:(dataObject){
self.dataObjectArr = Object.keys(dataObject).map(function(key){
return dataObject[key];
});
for(var i= 0; i < self.dataObjectArr.length; i++ ){
self.dataObjectArr[i]['name'] = self.dataObjectArr[i];
self.uniqArr = new Array();
for(var key in self.dataObjectArr){
self.uniqArr.push(self.dataObjectArr[key]);
}
}
self.uniqObject = DataMixin.toObject(self.uniqArr);
return self.uniqObject;
}
您可以使用$.unique()
,$.map()
,$.grep()
jsiddle您可以使用$.unique()
,$.map()
,$.grep()
jshiddle或者您可以使用下划线或lodash()之类的库。lodash示例:
var arr = [
{level:0,name:"greg"},
{level:0,name:"Math"},
{level:0,name:"greg"}
];
var res = $.map($.unique($.map(arr, el => el.name)), name =>
$.grep(arr, el => el.name === name)[0]);
OFC。在这些任务中总是要考虑的一件事是,你到底想要做什么:修改现有的数组,或者返回一个新的数组。这个示例返回一个新的数组。
或者你可以使用这些库作为下划线或LoSASH()。
var arr = [
{level:0,name:"greg"},
{level:0,name:"Math"},
{level:0,name:"greg"}
];
var res = $.map($.unique($.map(arr, el => el.name)), name =>
$.grep(arr, el => el.name === name)[0]);
在这些任务中总是要考虑的一件事是,你到底想要做什么:修改现有的数组,或者重新获得一个新的数组。这个例子返回一个新的数组。应该<代码>数学< /代码> be >代码>“数学”< /代码>?看来你的函数声明有一个<代码>:这里> >代码>函数ReaveDeaveStudio:(DATAObjor)
?您可以使用下划线
检查此答案应数学
为“数学”
?似乎您的函数声明有一个:
此处->函数移除副本:(数据对象)
?您可以使用下划线
检查此答案什么是临时索引(el.name)<0
do?小于0表示-1(未找到)?如果未找到,indexOf()请准确解释
将返回-1我知道,但如何用这种逻辑删除重复项我无法理解,我没有显式返回false
。如果没有返回任何内容,它将被视为未定义的,这与false
什么是临时索引(el.name)<0
做什么?小于0表示-1(未找到)??请您确切解释一下,如果没有找到,indexOf()
将返回-1我知道,但如何用这种逻辑删除重复项我无法理解,我没有显式返回false
。如果没有返回任何内容,它将被视为未定义的,这与false
相同