仍在通过函数式编程工作:.forEach(),. map(),. filter(),. reduce()。
我正在接受新的挑战。
var bikes = [
{name: 'Cinelli Bolt', price: '2000', age: 1, singlespeed: 'yes', features: ['tubeless tires', 'disk brakes', 'carbon frame']},
{name: 'Cinelli Mash', price: '1700', age: 3, singlespeed: 'yes', features: ['gatorskin tyres', 'sram drivetrain', 'steel frame']},
{name: 'Specialized Langster', price: '1000', age: 1, singlespeed: 'no', features: ['two speed enclosed hub', 'bullbars', 'carbon frame']}
];
我试图通过特定功能'碳框架过滤阵列'。我在考虑使用过滤器,但我对调用key.value对中的功能感到困惑。
var justCarbonBikes = bikes.filter(function(bike) {
return bike.features['carbon frame'];
});
预期结果应修改原始数组:
var bikes = [
{name: 'Cinelli Bolt', price: '2000', age: 1, singlespeed: 'yes', features: ['tubeless tires', 'disk brakes', 'carbon frame']},
{name: 'Specialized Langster', price: '1000', age: 1, singlespeed: 'no', features: ['two speed enclosed hub', 'bullbars', 'carbon frame']}
];
答案 0 :(得分:2)
你快到了。通过使用Array#indexOf
检查索引,您可以将其用作返回值。
return bike.features.indexOf('carbon frame') + 1;
var bikes = [{ name: 'Cinelli Bolt', price: '2000', age: 1, singlespeed: 'yes', features: ['tubeless tires', 'disk brakes', 'carbon frame'] }, { name: 'Cinelli Mash', price: '1700', age: 3, singlespeed: 'yes', features: ['gatorskin tyres', 'sram drivetrain', 'steel frame'] }, { name: 'Specialized Langster', price: '1000', age: 1, singlespeed: 'no', features: ['two speed enclosed hub', 'bullbars', 'carbon frame'] }],
justCarbonBikes = bikes.filter(function(bike) {
return bike.features.indexOf('carbon frame') + 1;
}),
bikesWithoutCarbon = bikes.filter(function(bike) {
return bike.features.indexOf('carbon frame') === -1;
});
console.log(justCarbonBikes);
console.log(bikesWithoutCarbon);

.as-console-wrapper { max-height: 100% !important; top: 0; }

ES6,Array#includes
作为返回值。
var bikes = [{ name: 'Cinelli Bolt', price: '2000', age: 1, singlespeed: 'yes', features: ['tubeless tires', 'disk brakes', 'carbon frame'] }, { name: 'Cinelli Mash', price: '1700', age: 3, singlespeed: 'yes', features: ['gatorskin tyres', 'sram drivetrain', 'steel frame'] }, { name: 'Specialized Langster', price: '1000', age: 1, singlespeed: 'no', features: ['two speed enclosed hub', 'bullbars', 'carbon frame'] }],
justCarbonBikes = bikes.filter(b => b.features.includes('carbon frame')),
bikesWithoutCarbon = bikes.filter(b => !b.features.includes('carbon frame'));
console.log(justCarbonBikes);
console.log(bikesWithoutCarbon);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:1)
这是一个解决方案,您可以遍历过滤器功能中的功能,如果找到碳帧,则返回
var justCarbonBikes = bikes.filter(function(bike) {
for(let i of bike.features){
if(i == 'carbon frame'){
return bike
}
}
});