列出具有单独键位置的不同数组的匹配值
List matching values of different arrays with separate key location
鉴于以下数据,我将如何找到不止一个人喜欢的输出为:
{
喜欢:'bananas',
喜欢的人:['person1', 'person2']
}
var data = [
{
name: 'person1',
likes: ['bananas', 'apples']
},
{
name: 'person2',
likes' ['grapes', 'bananas']
}
]
如果有人能指出正确的方向,那就太好了。
干杯
您可以遍历数据并创建一个哈希图,其中 likes
项作为键,names
的数组作为值。
count = {}
for (var i = 0; i < data.length; i++) {
for(var j = 0; j < data['likes'].length; j++){
var key = data[i]['likes'][j]
if(!(key in count)){
count[key] = []
}
count[key].push(data[i]['name'])
}
}
示例输出是这样的:
{'bananas':['person1', 'person2'], 'apples':['person1'], 'grapes':['person2']}
我会使用外部变量和嵌套的 foreach 循环,当然还有更有效的方法,但这相当简洁易读
var likes = {};
_.each(data,function(person){
_.each(person.likes,function(like){
if(!likes[like])
likes[like]=[];
likes[ like ].push( person.name );
})
}
然后您可以过滤掉不超过一个元素的值
likes = _.filter(likes,function(value,name){ return value.length > 1; });
哪个会给你
{ 'bananas':['person1','person2'] }
在您提供的情况下
此解决方案使用的下划线比您摇摇晃晃的多,但效率不如普通的旧 javascript 答案。
// get a list of all the fruits
var fruits = _.chain(data)
.pluck('likes')
.flatten()
.uniq()
.value();
var results = _.map(fruits, function(fruit){
var peopleWhoLikeThisFruit = _.filter(data, function(person){
return _.contains(person.likes, fruit);
});
return {
liked: fruit,
likes: _.pluck(peopleWhoLikeThisFruit, 'name')
}
});
鉴于以下数据,我将如何找到不止一个人喜欢的输出为:
{ 喜欢:'bananas', 喜欢的人:['person1', 'person2'] }
var data = [
{
name: 'person1',
likes: ['bananas', 'apples']
},
{
name: 'person2',
likes' ['grapes', 'bananas']
}
]
如果有人能指出正确的方向,那就太好了。
干杯
您可以遍历数据并创建一个哈希图,其中 likes
项作为键,names
的数组作为值。
count = {}
for (var i = 0; i < data.length; i++) {
for(var j = 0; j < data['likes'].length; j++){
var key = data[i]['likes'][j]
if(!(key in count)){
count[key] = []
}
count[key].push(data[i]['name'])
}
}
示例输出是这样的:
{'bananas':['person1', 'person2'], 'apples':['person1'], 'grapes':['person2']}
我会使用外部变量和嵌套的 foreach 循环,当然还有更有效的方法,但这相当简洁易读
var likes = {};
_.each(data,function(person){
_.each(person.likes,function(like){
if(!likes[like])
likes[like]=[];
likes[ like ].push( person.name );
})
}
然后您可以过滤掉不超过一个元素的值
likes = _.filter(likes,function(value,name){ return value.length > 1; });
哪个会给你
{ 'bananas':['person1','person2'] }
在您提供的情况下
此解决方案使用的下划线比您摇摇晃晃的多,但效率不如普通的旧 javascript 答案。
// get a list of all the fruits
var fruits = _.chain(data)
.pluck('likes')
.flatten()
.uniq()
.value();
var results = _.map(fruits, function(fruit){
var peopleWhoLikeThisFruit = _.filter(data, function(person){
return _.contains(person.likes, fruit);
});
return {
liked: fruit,
likes: _.pluck(peopleWhoLikeThisFruit, 'name')
}
});