javascript将数组与对象数组进行比较
我有一些我正在研究的角度代码。我们的目标是尽可能少地使用angular 1.x功能,因为它很快就会被重构 我正在比较一个数组javascript将数组与对象数组进行比较,javascript,angularjs,arrays,loops,Javascript,Angularjs,Arrays,Loops,我有一些我正在研究的角度代码。我们的目标是尽可能少地使用angular 1.x功能,因为它很快就会被重构 我正在比较一个数组 let subscription = [ "Cinemax Subscription", "Disney Subscription", "Encore Subscription", "Epix Subscription", "HBO Subscription", "MLB Subscription", "NBA Subscrip
let subscription = [
"Cinemax Subscription",
"Disney Subscription",
"Encore Subscription",
"Epix Subscription",
"HBO Subscription",
"MLB Subscription",
"NBA Subscription",
"NHL Subscription",
"Division"
]
指向包含另一个数组的具有键值关系的对象数组
let profiles = [
{
name:"1+ Adults in Household",
qualifiers: [
{
name: 'Number of adults in the household'
}
]
},
{
name: '75k',
qualifers: [
{
name: 'Division'
},
{
name: 'Income'
}
]
},
{
name: 'Time Warner',
qualifers: [
{
name: 'Division'
}
]
}
]
我在索引和循环方面遇到了困难
let = profilesFiltered = [];
最初我尝试使用过滤器和angular.for
每个用于比较阵列
let filteredProfiles = subscription.filter( function (src) {
angular.forEach(profiles, function (key, index) {
if(src === key.qualifiers[index].name) {
profilesFiltered.push(key);
}
})
});
我在if声明中看到
key.qualifiers[index].name // 'Number of adults in the household'
与之相比,一开始是正确的
subscription[0] // however, it will continue to 1 on the first object which isn't there.
我看到它是如何开始失败的。但我不知道如何正确循环**profiles**数组中的限定符
期望的结果是那些houseDivision,这是索引中的最后一个数组项
profilesFiltered = [
{
name: '75k',
qualifers: [
{
name: 'Division'
},
{
name: 'Income'
}
]
},
{
name: 'Time Warner',
qualifers: [
{
name: 'Division'
}
]
}
]
在这一点上,我们非常感谢您的任何反馈
谢谢只需结合使用
filter()
和some()
过滤配置文件即可:
let订阅=[
“Cinemax订阅”,
“迪士尼订阅”,
“安可订阅”,
“Epix订阅”,
“HBO订阅”,
“MLB订阅”,
“NBA订阅”,
“NHL订阅”,
“分部”
]
让配置文件=[{
名称:“1+家庭成人”,
限定符:[{
姓名:“家庭中成年人的数量”
}]
},
{
名称:'75k',
限定符:[{
名称:‘部门’
},
{
姓名:“收入”
}
]
},
{
名称:“时代华纳”,
限定符:[{
名称:‘部门’
}]
}
]
让res=profiles.filter(v=>v.qualifiers.some(q=>subscription.includes(q.name));
console.log(res)
只需使用filter()
和some()
的组合来过滤配置文件:
let订阅=[
“Cinemax订阅”,
“迪士尼订阅”,
“安可订阅”,
“Epix订阅”,
“HBO订阅”,
“MLB订阅”,
“NBA订阅”,
“NHL订阅”,
“分部”
]
让配置文件=[{
名称:“1+家庭成人”,
限定符:[{
姓名:“家庭中成年人的数量”
}]
},
{
名称:'75k',
限定符:[{
名称:‘部门’
},
{
姓名:“收入”
}
]
},
{
名称:“时代华纳”,
限定符:[{
名称:‘部门’
}]
}
]
让res=profiles.filter(v=>v.qualifiers.some(q=>subscription.includes(q.name));
console.log(res)
是否要查找类似的内容,请签出我的代码
let profiles=[
{
名称:“1+家庭成人”,
限定符:[
{
姓名:“家庭中成年人的数量”
}
]
},
{
名称:'75k',
限定符:[
{
名称:‘部门’
},
{
姓名:“收入”
}
]
},
{
名称:“时代华纳”,
限定符:[
{
名称:‘部门’
}
]
}
];
让订阅=[
“Cinemax订阅”,
“迪士尼订阅”,
“安可订阅”,
“Epix订阅”,
“HBO订阅”,
“MLB订阅”,
“NBA订阅”,
“NHL订阅”,
“分部”
];
让profilesFiltered=profiles.filter(函数(a){
//首先过滤profiles数组中的所有元素
//检查其限定符数组是否为空
返回a.qualifiers.some(函数(b){
//通过检查属性名称筛选限定符数组
//它是否从订阅数组中删除了任何元素
返回订阅。indexOf(b.name)!=-1;
});
});
console.log(profilesFiltered)代码>您是否正在寻找类似的内容,请签出我的代码
let profiles=[
{
名称:“1+家庭成人”,
限定符:[
{
姓名:“家庭中成年人的数量”
}
]
},
{
名称:'75k',
限定符:[
{
名称:‘部门’
},
{
姓名:“收入”
}
]
},
{
名称:“时代华纳”,
限定符:[
{
名称:‘部门’
}
]
}
];
让订阅=[
“Cinemax订阅”,
“迪士尼订阅”,
“安可订阅”,
“Epix订阅”,
“HBO订阅”,
“MLB订阅”,
“NBA订阅”,
“NHL订阅”,
“分部”
];
让profilesFiltered=profiles.filter(函数(a){
//首先过滤profiles数组中的所有元素
//检查其限定符数组是否为空
返回a.qualifiers.some(函数(b){
//通过检查属性名称筛选限定符数组
//它是否从订阅数组中删除了任何元素
返回订阅。indexOf(b.name)!=-1;
});
});
console.log(profilesFiltered)代码>以下是数据结构的工作代码。它是基于使用函数的。如果您需要没有副本-
下面是一个适用于您的数据结构的工作代码。它是基于使用函数的。如果您需要没有副本-
你的问题,至少对我来说,仍然很不清楚。你的代码有很多错误。例如,在筛选函数中不返回布尔值。所以你的FilteredProfile总是空的。您没有运行限定符
数组-在第一个btw之后的对象中拼写错误-您只查找第一个限定符。等等。你可以提供一个小例子,自我解释你想要达到的目标。你的问题,至少对我来说,仍然很不清楚。你的代码有很多错误。例如,在筛选函数中不返回布尔值。所以你的FilteredProfile总是空的。您没有运行限定符
数组-在第一个btw之后的对象中拼写错误-您只是在查找fir
profiles.filter(v => v.qualifiers.some(q => subscription.includes(q.name)));
let profiles = [
{
name:"1+ Adults in Household",
qualifiers: [
{
name: 'Number of adults in the household'
}
]
},
{
name: '75k',
qualifiers: [
{
name: 'Division'
},
{
name: 'Income'
}
]
},
{
name: 'Time Warner',
qualifiers: [
{
name: 'Division'
}
]
}
];
let subscription = [
"Cinemax Subscription",
"Disney Subscription",
"Encore Subscription",
"Epix Subscription",
"HBO Subscription",
"MLB Subscription",
"NBA Subscription",
"NHL Subscription",
"Division"
];
var filteredProfiles = profiles.reduce(function (collectedResults, profile) {
var newResults = profile.qualifiers.reduce(function(foundQualifiers, qualifier) {
if(subscription.indexOf(qualifier.name) > -1) {
return foundQualifiers.concat(qualifier.name);
} else {
return foundQualifiers;
}
}, []);
return collectedResults.concat(newResults);
}, []);
document.write(filteredProfiles);