我有一个我要传递给函数的请求颜色列表:
const requestedColours = ['blue','green'];
我把它传递给一个函数,该函数包含一个具有各种颜色细节的对象:
colorOptions(requestedColours) {
const options = {
blue: {
icon: 'sea.jpg',
title: 'Sea Blue',
},
green: {
icon: 'leaf.jpg',
title: 'Leafy green',
},
pink: {
icon: 'flower.jpg',
title: 'Rose Pink',
}
}
return options.some(requestedColours);
}
我知道以下行不正确:
return options.some(requestedColours);
但是我也尝试过,例如:
return options.some('blue');
这不会返回blue
的子对象,如何正确使用array.some
?
答案 0 :(得分:1)
Array#reduce
超过requestedColours
数组。
注意:明智的想法是将options
对象移到函数外部。
const requestedColours = ['blue', 'green'];
const options = {
blue: {
icon: 'sea.jpg',
title: 'Sea Blue',
},
green: {
icon: 'leaf.jpg',
title: 'Leafy green',
},
pink: {
icon: 'flower.jpg',
title: 'Rose Pink',
}
};
const colorOptions = (obj, arr) => {
return requestedColours.reduce((s, a) => {
if (a in options) {
s[a] = obj[a];
}
return s;
}, {});
};
console.log(colorOptions(options, requestedColours));
答案 1 :(得分:0)
some
函数接受一个函数并使用它来测试数组的每个元素。如果函数对于数组的任何元素返回true,则返回true。例如,如果我想检查一个数组是否包含至少一个大于5的元素,我可能会尝试:
[1, 2, 5, 7].some(function(elem) { return elem > 5; })
我不太确定您在上述功能中想要达到的目标,但我不认为some
功能符合您的需求。
答案 2 :(得分:0)
some
是array
原型中采用函数并返回true
或false
的方法。它使用数组中的项运行函数,直到它返回truthy值。如果没有,则返回false
。
requestedColors
是否在options
中:some
即:
var requestedColours=["blue","green"];
var options={blue:{icon:"sea.jpg",title:"Sea Blue"},green:{icon:"leaf.jpg",title:"Leafy green"},pink:{icon:"flower.jpg",title:"Rose Pink"}};
var objectHasKey = obj => key => key in obj;
console.log(
requestedColours.some(objectHasKey(options))
);

map
从键映射到选项
var requestedColours=["red", "blue","green"];
var options={blue:{icon:"sea.jpg",title:"Sea Blue"},green:{icon:"leaf.jpg",title:"Leafy green"},pink:{icon:"flower.jpg",title:"Rose Pink"}};
var getKey = obj => key => obj[key];
console.log(
requestedColours
.map(getKey(options))
.filter(opt => opt)
);

您可以使用一个reduce
方法在一个循环中执行此操作:
requestedColours
options
检索选项对象
const requestedColours = ['blue', 'green'];
const options = {
blue: {
icon: 'sea.jpg',
title: 'Sea Blue',
},
green: {
icon: 'leaf.jpg',
title: 'Leafy green',
},
pink: {
icon: 'flower.jpg',
title: 'Rose Pink',
}
}
const pickedColors = requestedColours.reduce(
(picked, key) => Object.assign(picked, { [key]: options[key] }),
{}
);
console.log(pickedColors);