为什么函数不返回自定义对象?

时间:2018-11-06 11:04:53

标签: javascript

我有要迭代的对象数组。

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数组中的对象吗?

2 个答案:

答案 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);