我在下面有一个物体。
object1 = {name: "tony, tony", city: "Reno, Reno", country: "Canada, Canada"}
我想删除object1中的重复值并返回如下。
filteredObject = {name: "tony",city: "Reno", country: "Canada"}
有什么好的方法可以实现这一目标吗?
答案 0 :(得分:4)
您可以使用for..in
循环遍历对象。然后split()
的每个值,并使用 Set 和 Spread Synatax 和join()
const obj = object1 = {name: "tony, tony", city: "Reno, Reno", country: "Canada, Canada"};
const filteredObj ={};
for(let key in obj){
filteredObj[key] = [... new Set(obj[key].split(', '))].join(', ');
}
console.log(filteredObj)
答案 1 :(得分:2)
您可以使用map
和reduce
函数来操作对象键。为了删除重复项,您可以使用临时字典来保存您的密钥。可以使用str.split(', ')
找到字符串中的各个值。看起来像这样
// Reno, Reno, Toronto => Reno, Toronto
const removeDupsFromString = (s) => {
const dict = s.split(', ').reduce((acc, curr) => {
acc[curr] = true;
return acc;
}, {});
return Object.keys(dict).join(', ');
}
const removeDupsFromObject = (obj) => Object.keys(obj).reduce((acc, key) => {
acc[key] = removeDupsFromString(obj[key]);
return acc;
}, {});
const obj = {
name: "Tony, Tony, Stark",
city: "Reno, Reno",
country: "Canada, Canada"
};
console.log(removeDupsFromObject(obj));
这并不能使单词保持顺序,Tony, Tony, Stark
可能会产生Tony, Stark
或Stark, Tony
,因为它使用Object.keys
答案 2 :(得分:1)
从对象值中删除重复的条目后,可以使用Array#reduce
来累积结果。
Object#entries
将对象中的[key,value]对数组作为数组。
reduce
将作用于该数组,并仅通过采用唯一值将其累积到新对象中。 replace(/\s+/g, '')
会删除所有空白,否则集合将不会将单词视为唯一(考虑空格可能在逗号“,”之前或之后的情况)。
const object1 = {name: "tony, tony", city: "Reno, Reno", country: "Canada, Canada", foo: "foo, foo, bar", baz: "baz ,bar ,bar"};
//Notice the last entry in this object where space is before the comma
const obj = Object.entries(object1).reduce((acc, ele) => {
acc[ele[0]] = [...new Set(ele[1].replace(/\s+/g, '').split(","))].join(",");
return acc;
}, {});
console.log(obj);
答案 3 :(得分:0)
使用object.keys
和forEach
和Set
let object1 = {name: "tony, tony, stark, start, stark", city: "Reno, Reno", country: "Canada, Canada"}
let filteredObject = {}
Object.keys(object1).forEach(e=>{
filteredObject[e] = [...new Set(object1[e].split(', '))].join(', ')
})
console.log(filteredObject)