我有要迭代的对象数组。
tempBnt = shortcuts.find(function(shortcut){
if(shortcut.alias.indexOf("tomatos") > 0)
return {
"action":entry.action,
"tooltip": entry.tooltip,
"id": "btn"+entry.name
}
});
当if
条件为true时,我想返回一个自定义对象,但是上面的代码从shortcuts
数组中返回一个对象。
是否可以从上面的代码返回自定义对象?而不是shortcuts
数组中的对象吗?
答案 0 :(得分:0)
find
仅返回结果为truthy
的数组的第一个元素。我认为您想使用filter
查找符合条件的所有元素,并使用map
更改数据的格式。
然后indexOf
返回值>= 0
,如果在某处找到该字符串,则返回-1
。因此也可能会解决您的问题。
let shortcuts = [
{alias: "test", action: "test", tooltip: "test", name: "test"},
{alias: "tomatos", action: "tomatos", tooltip: "tomatos", name: "tomatos"},
{alias: "testtomatos", action: "testtomatos", tooltip: "testtomatos", name: "testtomatos"}
];
let tempBnt = shortcuts.filter(s => s.alias.indexOf("tomatos") > -1).map(s => ({
action: s.action,
tooltip: s.tooltip,
id: "btn" + s.name
}));
console.log(tempBnt);
答案 1 :(得分:-1)
您不能使用“查找”功能返回自定义对象,但是可以使用包装器功能来做到这一点,如下所示:
var shortcuts = [
{
action: "action",
tooltip: "tooltip",
name: "name",
alias: "tomatos"
}]
var findAndGet = function(arr, matcher, getter)
{
var elem = arr.find(matcher);
if (elem)
{
return getter(elem);
}
}
var tempBnt = findAndGet(shortcuts, function(elem)
{
return elem.alias.indexOf("tomatos") >= 0
}, function(elem)
{
return {
"action": elem.action,
"tooltip": elem.tooltip,
"id": "btn" + elem.name
}
})
console.log(tempBnt);