在我的代码中,我创建了一个名为array1的数组。在这个数组中,我列出了多个对象。我想将array1对象值过滤为唯一,并需要将ID与其各自的值进行分组。我在这里添加了我的代码,
数组1
var array1 = [
{
value:"A",
id:1
},
{
value:"B",
id:1
},
{
value:"C",
id:2
},
{
value:"B",
id:5
},
{
value:"A",
id:2
},
{
value:"A",
id:1
}
];
我想要的结果,
[
{
group:"A",
groupIds:[1, 2]
},
{
group:"B",
groupIds:[1, 5]
},
{
group:"C",
groupIds:[2]
}
]
答案 0 :(得分:4)
在普通的Javascript中,您可以使用哈希表和Array#indexOf
来获取唯一值。
var array = [{ value: "A", id: 1 }, { value: "B", id: 1 }, { value: "C", id: 2 }, { value: "B", id: 5 }, { value: "A", id: 2 }, { value: "A", id: 1 }],
grouped = array.reduce(function (hash) {
return function (r, a) {
if (!hash[a.value]) {
hash[a.value] = { group: a.value, groupIds: [] };
r.push(hash[a.value]);
}
if (hash[a.value].groupIds.indexOf(a.id) === -1) {
hash[a.value].groupIds.push(a.id);
}
return r;
};
}(Object.create(null)), []);
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:2)
您可以使用library(stringi)
library(purrr)
df$zip_1 <- stri_trim_both(df$postal_code) %>%
stri_match_last_regex("((?:[[:digit:]]{5}-[[:digit:]]{4})|(?:[[:digit:]]{4,5}))") %>%
ifelse(nchar(.)==4, 0 %s+% ., .) %>%
.[,2]
df[,2:3]
## postal_code zip_1
## 1 85016 85016
## 2 20230 20230
## 4 12207 12207
## 5 3436 03436
## 6 6901 06901
## 8 412 108 <NA>
## 10 2132 02132
## 11 37402 37402
## 12 7625149 76251
## 14 98501 98501
## 15 94559 94559
## 18 33566-1173 33566-1173
## 19 10019 10019
## 21 10963 10963
## 22 3000 03000
## 23 53406 53406
## 24 85258 85258
## 25 HP12 3PR <NA>
## 27 20164 20164
## 28 55419 55419
按值对对象进行分组,并使用forEach()
从Set()
中删除重复的ID
groupIds
答案 2 :(得分:1)
_.uniqBy(objects, function (object) {
return object.id;
});
将会:)
答案 3 :(得分:0)
使用_.groupBy
和_.mapValues
来迭代对象值
var res = _.chain(array1)
.groupBy('value')
.mapValues(function(val, key) {
return {
group: key,
groupIds: _.chain(val).map('id').uniq().value()
};
})
.values()
.value();
答案 4 :(得分:0)
这是普通Javascript中的另一个。
var hash = {}
array1.forEach( function(e) {
hash[e.value] = hash[e.value] || [];
if (hash[e.value].indexOf(e.id) == -1) { hash[e.value].push(e.id) }
})
var result = Object.keys(hash).map( function(key) {
return { group: key, groupIds: hash[key] }
})
答案 5 :(得分:0)
使用lodash:
_(array1)
.uniqWith(_.isEqual)
.groupBy('value')
.map((v, k) => ({ group: k, groupIds: _.map(v, 'id')}))
.value()
id
和value
道具。value
属性。由于初始数组中有三个唯一值,因此该对象应该有三个键。group
和groupIds
属性。