繁体   English   中英

在 arrays 数组中按大小排序

[英]Sort by size in an array of arrays with objects

我正在尝试按尺寸订购,但是,我不明白为什么它不起作用。 显然错误必须来自“for in”,因为在测试它时我无法完全迭代“产品”。

let products = [
  [
    { product: "t1", price: 123, size: "S" },
    { product: "f1", price: 45, size: "XL" },
    { product: "t5", price: 910, size: "M" }
  ],
  [
    { product: "f2", price: 6.78, size: "L" },
    { product: "t2", price: 910, size: "XL" },
    { product: "t3", price: 910, size: "S" }
  ]
];

let obj = {
  sizesSM: [],
  sizesLXL: []
};

for (let i in products)
  for (let j in products) {
    if (products[i][j].size === "S" || products[i][j].size === "M")
      obj.sizesSM.push(products[i][j]);
    else 
      obj.sizesLXL.push(products[i][j]);
  }

console.log(obj);

预期的 output 是在 object 的一侧保存所有尺寸 S 和 M,另一侧保存 L 和 XL。

谢谢!

你可以像这样填写你的sizeSM:

obj.sizesSM = products.flat().filter(product => product.size === "S" || product.size === "M")

您可以适应其他阵列

Ps:顺便说一下,您的内部循环在错误的数组上循环,它也应该在内部数组上循环

你需要更换

for (let j in products) {

for (let j in products[i]) {

它会起作用。

 let products = [ [ { product: "t1", price: 123, size: "S" }, { product: "f1", price: 45, size: "XL" }, { product: "t5", price: 910, size: "M" } ], [ { product: "f2", price: 6.78, size: "L" }, { product: "t2", price: 910, size: "XL" }, { product: "t3", price: 910, size: "S" } ] ]; let obj = { sizesSM: [], sizesLXL: [] }; for (let i in products) for (let j in products[i]) { if (products[i][j].size === "S" || products[i][j].size === "M") obj.sizesSM.push(products[i][j]); else obj.sizesLXL.push(products[i][j]); } console.log(obj);


除了forloop 之外,还可以使用flatfilterreduce来实现。

 let products = [ [ { product: "t1", price: 123, size: "S" }, { product: "f1", price: 45, size: "XL" }, { product: "t5", price: 910, size: "M" } ], [ { product: "f2", price: 6.78, size: "L" }, { product: "t2", price: 910, size: "XL" }, { product: "t3", price: 910, size: "S" } ] ]; const sizeGroupBy = (...size) => products.flatMap(a => a).filter(o => size.includes(o.size)); console.log('sizesSM', JSON.stringify(sizeGroupBy('S', 'M'))); console.log('sizesLXL', JSON.stringify(sizeGroupBy('L', 'XL'))); const restructure = arr => arr.flat().reduce((accumu, current) => { if(['S', 'M'].includes(current.size)) { accumu['sizesSM'] = [...accumu['sizesSM']?? '', current]; } if(['L', 'XL'].includes(current.size)) { accumu['sizesLXL'] = [...accumu['sizesLXL']?? '', current]; } return accumu; }, {}); const obj = restructure(products); for (const [key, value] of Object.entries(obj)) { console.log(key, JSON.stringify(value)); }

不建议将for in语句与数组一起使用。

基本上for in用于迭代 object。

您可以在 arrays 上使用for of语句或forEach方法...

 let products = [ [ { product: "t1", price: 123, size: "S" }, { product: "f1", price: 45, size: "XL" }, { product: "t5", price: 910, size: "M" } ], [ { product: "f2", price: 6.78, size: "L" }, { product: "t2", price: 910, size: "XL" }, { product: "t3", price: 910, size: "S" } ] ]; let obj = { sizesSM: [], sizesLXL: [] }; products.flat().forEach(product => { if (product.size === 'S' || product.size === 'M') { obj.sizesSM.push(product) } else { obj.sizesLXL.push(product) } }) console.log(obj);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM