删除数组中的元素
Deleting elements in an array
我正在开发 angular 应用程序。我有一个类似这样的数组“*identify duplicate”。
[
{
Name: "Jack",
Id: "1"
},
{
Name: "Rose",
Id: "2"
},
{
Name: "Jack",
Id: "4"
},
{
Name: "Jack",
Id: "4"
}
]
如果我得到相同的名称和 ID,我想将两者都删除。就像上面的例子一样,在最后两个索引中,名称和 Id 是相同的“jack”但是如果名称是名称并且 id 不同,我不想删除任何数据。就像上面的例子一样,我想在我的数组中保留 ID 为“1”的 Jack,但想删除 ID 为“4”的最后两个“Jack”。我该怎么做?
您可以使用多种方法来完成此操作,例如过滤、减少、映射等...我在下面创建了两个示例。
第一个是简单的 forEach 方法。在循环过滤器中,如果有相同的 Name 元素,则推送到新数组
在第二个 reduce 方法中再次过滤元素,如果有相同的 Name 元素,然后推送到新数组。
var arr=[{Name: "Jack",Id: "1"},{Name: "Rose",Id: "2"},{Name: "Jack", Id: "4"},{Name: "Jack", Id: "4"}];
//simple foreach method
var result=[];
arr.forEach(el=>{
if(result.filter(x=>x.Name==el.Name).length==0){result.push(el);}
});
console.log(result);
//reduce method
var result2=arr.reduce((r, { Name, Id }) => {
var temp = r.find(o => Name === o.Name);
if (!temp) { r.push(temp = { Name, Id });}
return r;
}, []);
console.log(result2);
使用Map()
var arr = [{Name:"Jack",Id:"1"},{Name:"Rose",Id:"2"},{Name:"Jack",Id:"4"},{Name:"Jack",Id:"4"}]
let res = [...arr.reduce((a, i) => a.has(i.Name) ? a : a.set(i.Name, i), new Map).values()]
console.log(res)
试试这个:
var a = [
{
"Name": "Jack",
"Id": "1"
},
{
"Name": "Jack",
"Id": "4"
},
{
"Name": "Jack",
"Id": "4"
}
]
var jsonObject = a.map(JSON.stringify);
console.log(jsonObject);
var uniqueSet = new Set(jsonObject);
var uniqueArray = Array.from(uniqueSet).map(JSON.parse);
console.log(uniqueArray);
如果您可以使用 Javascript 库,例如 underscore 或 lodash,我建议您查看它们库中的 _.uniq 函数。来自 lodash
var arr=[ { Name: "Jack", Id: "1" }, { Name: "Rose", Id: "2" }, { Name: "Jack", Id: "4" }, { Name: "Jack", Id: "4" } ]; var updated_data = _.uniq(arr, 'Name');
我正在开发 angular 应用程序。我有一个类似这样的数组“*identify duplicate”。
[
{
Name: "Jack",
Id: "1"
},
{
Name: "Rose",
Id: "2"
},
{
Name: "Jack",
Id: "4"
},
{
Name: "Jack",
Id: "4"
}
]
如果我得到相同的名称和 ID,我想将两者都删除。就像上面的例子一样,在最后两个索引中,名称和 Id 是相同的“jack”但是如果名称是名称并且 id 不同,我不想删除任何数据。就像上面的例子一样,我想在我的数组中保留 ID 为“1”的 Jack,但想删除 ID 为“4”的最后两个“Jack”。我该怎么做?
您可以使用多种方法来完成此操作,例如过滤、减少、映射等...我在下面创建了两个示例。
第一个是简单的 forEach 方法。在循环过滤器中,如果有相同的 Name 元素,则推送到新数组
在第二个 reduce 方法中再次过滤元素,如果有相同的 Name 元素,然后推送到新数组。
var arr=[{Name: "Jack",Id: "1"},{Name: "Rose",Id: "2"},{Name: "Jack", Id: "4"},{Name: "Jack", Id: "4"}];
//simple foreach method
var result=[];
arr.forEach(el=>{
if(result.filter(x=>x.Name==el.Name).length==0){result.push(el);}
});
console.log(result);
//reduce method
var result2=arr.reduce((r, { Name, Id }) => {
var temp = r.find(o => Name === o.Name);
if (!temp) { r.push(temp = { Name, Id });}
return r;
}, []);
console.log(result2);
使用Map()
var arr = [{Name:"Jack",Id:"1"},{Name:"Rose",Id:"2"},{Name:"Jack",Id:"4"},{Name:"Jack",Id:"4"}]
let res = [...arr.reduce((a, i) => a.has(i.Name) ? a : a.set(i.Name, i), new Map).values()]
console.log(res)
试试这个:
var a = [
{
"Name": "Jack",
"Id": "1"
},
{
"Name": "Jack",
"Id": "4"
},
{
"Name": "Jack",
"Id": "4"
}
]
var jsonObject = a.map(JSON.stringify);
console.log(jsonObject);
var uniqueSet = new Set(jsonObject);
var uniqueArray = Array.from(uniqueSet).map(JSON.parse);
console.log(uniqueArray);
如果您可以使用 Javascript 库,例如 underscore 或 lodash,我建议您查看它们库中的 _.uniq 函数。来自 lodash
var arr=[ { Name: "Jack", Id: "1" }, { Name: "Rose", Id: "2" }, { Name: "Jack", Id: "4" }, { Name: "Jack", Id: "4" } ]; var updated_data = _.uniq(arr, 'Name');