从具有条件的对象数组中获取字符串数组
Get an array of strings from an array of objects with conditions
从对象数组中获取字符串数组的最佳方法是什么,您可以在其中指定仅在值 y=z 的情况下取值 x?
当前解决方案:
array = [{
"Item": "A",
"Quantity": 2
},
{
"Item": "B",
"Quantity": 7
},
{
"Item": "C",
"Quantity": 7
},
{
"Item": "D",
"Quantity": 7
},
{
"Item": "E",
"Quantity": 7
},
{
"Item": "F",
"Quantity": 1
}
];
let filteredValues = array.map((el) => el.Quantity === 7 && el.Item);
console.log(filteredValues)
预期结果:
["B", "C", "D", "E"]
实际结果:
[false, "B", "C", "D", "E", false]
附加信息:
使用 next.js / 反应
首先,执行 filter and then do a map 以仅获得您需要的 属性。
const array = [
{ Item: "A", Quantity: 2 },
{ Item: "B", Quantity: 7 },
{ Item: "C", Quantity: 7 },
{ Item: "D", Quantity: 7 },
{ Item: "E", Quantity: 7 },
{ Item: "F", Quantity: 1 },
];
let filteredValues = array
.filter((el) => el.Quantity === 7 && el.Item)
.map(({ Item }) => Item);
console.log(filteredValues);
或者,您可以使用 reduce,如下所示。
const array = [
{ Item: "A", Quantity: 2 },
{ Item: "B", Quantity: 7 },
{ Item: "C", Quantity: 7 },
{ Item: "D", Quantity: 7 },
{ Item: "E", Quantity: 7 },
{ Item: "F", Quantity: 1 },
];
let filteredValues = array.reduce((results, el) => {
if (el.Quantity === 7 && el.Item) {
results.push(el.Item);
}
return results;
}, []);
console.log(filteredValues);
最好的方法是使用Array.prototype.reduce
let data = [{
"Item": "A",
"Quantity": 2
},
{
"Item": "B",
"Quantity": 7
},
{
"Item": "C",
"Quantity": 7
},
{
"Item": "D",
"Quantity": 7
},
{
"Item": "E",
"Quantity": 7
},
{
"Item": "F",
"Quantity": 1
}
];
const result = data.reduce((accumulator, current) => {
return current["Quantity"] === 7 ? accumulator.concat(current["Item"]): accumulator;
}, [])
console.log(result);
使用Array.filter() along with Array.map()
工作演示:
const array = [{
"Item": "A",
"Quantity": 2
}, {
"Item": "B",
"Quantity": 7
}, {
"Item": "C",
"Quantity": 7
},{
"Item": "D",
"Quantity": 7
},{
"Item": "E",
"Quantity": 7
},{
"Item": "F",
"Quantity": 1
}];
const filteredValues = array.filter((el) => el.Quantity === 7).map(elem => elem.Item);
console.log(filteredValues)
从对象数组中获取字符串数组的最佳方法是什么,您可以在其中指定仅在值 y=z 的情况下取值 x?
当前解决方案:
array = [{
"Item": "A",
"Quantity": 2
},
{
"Item": "B",
"Quantity": 7
},
{
"Item": "C",
"Quantity": 7
},
{
"Item": "D",
"Quantity": 7
},
{
"Item": "E",
"Quantity": 7
},
{
"Item": "F",
"Quantity": 1
}
];
let filteredValues = array.map((el) => el.Quantity === 7 && el.Item);
console.log(filteredValues)
预期结果:
["B", "C", "D", "E"]
实际结果:
[false, "B", "C", "D", "E", false]
附加信息: 使用 next.js / 反应
首先,执行 filter and then do a map 以仅获得您需要的 属性。
const array = [
{ Item: "A", Quantity: 2 },
{ Item: "B", Quantity: 7 },
{ Item: "C", Quantity: 7 },
{ Item: "D", Quantity: 7 },
{ Item: "E", Quantity: 7 },
{ Item: "F", Quantity: 1 },
];
let filteredValues = array
.filter((el) => el.Quantity === 7 && el.Item)
.map(({ Item }) => Item);
console.log(filteredValues);
或者,您可以使用 reduce,如下所示。
const array = [
{ Item: "A", Quantity: 2 },
{ Item: "B", Quantity: 7 },
{ Item: "C", Quantity: 7 },
{ Item: "D", Quantity: 7 },
{ Item: "E", Quantity: 7 },
{ Item: "F", Quantity: 1 },
];
let filteredValues = array.reduce((results, el) => {
if (el.Quantity === 7 && el.Item) {
results.push(el.Item);
}
return results;
}, []);
console.log(filteredValues);
最好的方法是使用Array.prototype.reduce
let data = [{
"Item": "A",
"Quantity": 2
},
{
"Item": "B",
"Quantity": 7
},
{
"Item": "C",
"Quantity": 7
},
{
"Item": "D",
"Quantity": 7
},
{
"Item": "E",
"Quantity": 7
},
{
"Item": "F",
"Quantity": 1
}
];
const result = data.reduce((accumulator, current) => {
return current["Quantity"] === 7 ? accumulator.concat(current["Item"]): accumulator;
}, [])
console.log(result);
使用Array.filter() along with Array.map()
工作演示:
const array = [{
"Item": "A",
"Quantity": 2
}, {
"Item": "B",
"Quantity": 7
}, {
"Item": "C",
"Quantity": 7
},{
"Item": "D",
"Quantity": 7
},{
"Item": "E",
"Quantity": 7
},{
"Item": "F",
"Quantity": 1
}];
const filteredValues = array.filter((el) => el.Quantity === 7).map(elem => elem.Item);
console.log(filteredValues)