【发布时间】:2020-02-13 20:32:16
【问题描述】:
我在根据库存更新一系列产品时遇到了困难。这是数组:
const Data = [ 性别:[{ 男:真,女:假 }],股票: [ { 尺寸:3,库存:100 }, { 尺寸:3.5,库存:10 }, { 尺寸:4,库存:0 }, { 尺寸:4.5,库存:330 }, { 尺寸:5,库存:5 }, { 尺寸:5.5,库存:555 }, { 尺寸:6,库存:6 }, {尺寸:6.5,库存:63}, { 尺寸:7,库存:0 }, { 尺寸:7.5,库存:100 }, {尺寸:8,库存:33}, {尺寸:8.5,库存:333}, {尺寸:9,库存:222}, { 尺寸:9.5,库存:99 }, { 尺寸:10,库存:99 }, {尺寸:10.5,库存:77}, { 尺寸:11,库存:55 } ] }, { 性别:[{男:假,女:真}], 股票: [ {尺寸:3,库存:140}, {尺寸:3.5,库存:130}, {尺寸:4,库存:10}, {尺寸:4.5,库存:30}, {尺寸:5,库存:53}, { 尺寸:5.5,库存:55 }, {尺寸:6,库存:64}, {尺寸:6.5,库存:643}, { 尺寸:7,库存:0 }, { 尺寸:7.5,库存:100 }, {尺寸:8,库存:334}, {尺寸:8.5,库存:333}, {尺寸:9,库存:22}, { 尺寸:9.5,库存:9 }, { 尺寸:10,库存:99 }, { 尺寸:10.5,库存:7 }, { 尺寸:11,库存:45 } ], } ]
我想根据以下条件更新数组:
1) 如果客户选择的尺寸未包含在数组中,我只想返回包含所选尺寸的产品。为此,我正在更新。
我有以下代码来说明我的目标:
var set3 = new Set([ 4, 5.5, 6, 6.5 ]);
常量数组 = [];
for (const cat of set3) {
array.push(cat)}
我将客户选择的一组数字推送到一个数组中,并且我只想在产品包含这些尺寸(尺寸:4、5.5、6、6.5)时更新状态。
2) 我只想退回符合上述条件的产品。
这是我迄今为止尝试过的:
var set3 = new Set([ 4, 5.5, 6, 6.5 ]);
常量数组 = [];
for (const cat of set3) { 数组.push(cat) }
让 mappedData = Data.map((product) => { 返回 product.stock.map((item) => { 如果(item.stock === 0){ 返回 item.size = 未定义 } 别的 { 返回item.size } }) })
mappedData.forEach((item, idx, array) => {check = array.every (r => item.indexOf(r) >= 0) if( check ) { console.log(item) } else { return item } })
当我控制台记录该项目时,它会返回包含我正在寻找的项目的项目,但是 A)它不会更新产品,并且 B)当我控制台记录它时,它实际上并没有返回我正在寻找的项目。我确信这与我不了解 JavaScript 的事情有关。
【问题讨论】:
-
首先你的 setstate 在哪里? forEach 不会在循环之外返回任何内容
-
您好,感谢您的回复!我没有设置状态,因为我希望首先能够通过管道传输我的结果,然后将其存储在一个可以在 Component Will Mount 中更新的变量中。您认为仅过滤数据会更好吗?我该怎么办?
-
@CodeManiac 也许我不明白如何使用 forEach。我是否需要像在 for 循环中那样将结果推送到一个新数组中?
-
你可以使用 find 方法来代替
-
@CodeManiac 这看起来像是一个好的解决方案吗? const mappedData = Data.map((product) => { return product.stock.map((item) => { if(item.stock === 0) { return item.size = false } else { return item.size } }) }).find((item) => { const check = arr.every(r => item.indexOf((r)) >= 0); const state = []; if( check ) { return item } else { 返回 null } })
标签: javascript arrays node.js reactjs