我正在尝试在对象数组中查找匹配值。
我正在使用find
来完成这项工作,这似乎工作得很好。但是,如果我需要为其中一个键分配多个值,该怎么办?
下面是当前的代码:
const snack = "strawberry";
const fruits = [
{ label: "yellowFruit", value: "banana" },
{ label: "purpleFruit", value: "grape" },
{ label: "redFruit", value: "apple" },
{ label: "greenFruit", value: "waltermelon" },
];
下面是我如何发现我的价值的:
fruits.find(fruit => fruit.value === snack) || fruits[0]
我实际上需要在不复制标签的情况下将两个值关联到标签redFruit
,如下所示,但是这样find
就不能再做这项工作了。
如下所示:
const snack = "strawberry";
const fruits = [
{ label: "yellowFruit", value: "banana" },
{ label: "purpleFruit", value: "grape" },
{
label: "redFruit",
value: [
{ val: "apple" },
{ val: "strawberry" }
]
},
{ label: "greenFruit", value: "waltermelon" },
];
但是使用以下代码查找strawberry
并不匹配:
fruits.find(fruit => fruit.value === snacks) || fruits[0]
任何帮助都将不胜感激。
发布于 2019-03-25 02:58:28
你必须根据value
属性类型使用不同的方法,如果值是一个数组,那么使用Array#some
方法来实现结果。
let res = fruits.find(({ value }) => Array.isArray(value) ? value.some(({ val }) => val === snacks) : value === snacks) || fruits[0]
const snacks = "strawberry";
const fruits = [{
label: "yellowFruit",
value: "banana"
},
{
label: "purpleFruit",
value: "grape"
},
{
label: "redFruit",
value: [{
val: "apple"
},
{
val: "strawberry"
}
]
},
{
label: "greenFruit",
value: "waltermelon"
},
];
let res = fruits.find(({ value }) => Array.isArray(value) ? value.some(({ val }) => val === snacks) : value === snacks) || fruits[0]
console.log(res);
发布于 2019-03-25 03:08:14
保持数据简单:
const snack = "strawberry";
const fruits = [
{ label: "yellowFruit", value: "banana" },
{ label: "purpleFruit", value: "grape" },
{ label: "redFruit", value: "apple" },
{ label: "redFruit", value: "strawberry" },
{ label: "greenFruit", value: "waltermelon" },
];
..。你的代码也会很简单:
const result = fruits.find(({ value }) => value === snack)
发布于 2019-03-25 03:10:41
您可以这样做:
const snack = "strawberry";
const fruits = [{
label: "yellowFruit",
value: "banana"
},
{
label: "purpleFruit",
value: "grape"
},
{
label: "redFruit",
value: [{
val: "apple"
},
{
val: "strawberry"
}
]
},
{
label: "greenFruit",
value: "waltermelon"
},
];
let itemExists = fruits.some(item =>
Array.isArray(item.value) ?
item.value.some(subItem => subItem.val === snack) :
item.value === snack);
console.log(itemExists);
通过这种方式,无论该项是否存在,您都将收到一个布尔值。希望这能有所帮助,
https://stackoverflow.com/questions/55327320
复制相似问题