从具有条件的对象数组中获取字符串数组

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)