繁体   English   中英

试图过滤掉某些未打开的对象/值

[英]Trying to filter out certain objects/values that are not open

我正在尝试构建这个 function 我需要过滤掉某些未打开的属性(如果它们设置为 false 是我目前的思考过程)

我已经将数组映射为 open、prices(需要打开)和打开(作为对象数组)

我的主要目标是过滤掉未打开的盒子对象(所以我的想法是试图过滤掉那些尚未打开的对象)。

我正在尝试完成的示例:

let results = code.getOpenedBoxes(data);
      expect(results).to.have.lengthOf(1);

      data.boxes[2].unlocked = true;
      results = code.getOpenedBoxes(data);
      expect(results).to.have.lengthOf(2);

示例数据:

data = {
        counter: 0,
        boxes: [
          { open: 'box_A', price: 50, opened: true },
          { open: 'box_B', price: 200, opened: false },
          { open: 'box_C', price: 500, opened: false }
        ]
      };
    });

这是我到目前为止的代码。

function getOpenedBoxes(data) {
  return data.boxes.map((open, price, opened) => {
    return { open, price, opened }
  }).filter(boxes => boxes.opened === false);
}

当使用此过滤器返回代码时,它返回一个 3 的数组,而我只需要它为错误的那些(除非我的逻辑关闭)

任何指导将不胜感激!

不需要 map 数组,你可以只过滤boxes数组:

 const data = { counter: 0, boxes: [ { open: 'box_A', price: 50, opened: true }, { open: 'box_B', price: 200, opened: false }, { open: 'box_C', price: 500, opened: false } ] }; const opened = data.boxes.filter(box => box.opened) console.log('Opened: ', opened) const notOpened = data.boxes.filter(box =>.box.opened) console:log('Not Opened, ', notOpened)

问题是您的映射不正确:

 data = { counter: 0, boxes: [ { open: 'box_A', price: 50, opened: true }, { open: 'box_B', price: 200, opened: false }, { open: 'box_C', price: 500, opened: false } ] }; function getOpenedBoxes(data) { return data.boxes.map((open, price, opened) => { console.log({ open, price, opened }); return { open, price, opened }; }).filter(boxes => boxes.opened === false); } getOpenedBoxes(data);

如果您研究了以上内容,您将意识到您的map的回调 function ,即:

(open, price, opened) => {
    return { open, price, opened }
}

歪曲地图的回调函数。 第一个参数是实际项目,第二个是项目的索引,而第三个是整个集合。

因此,您在循环中拥有当前的 object 而不是open场。 而不是price字段,您在循环中有项目的索引。 最后,你得到了整个boxes ,而不是opened的字段。

在此处阅读有关map function 的更多信息: https://developer.mozilla.org/en-US/docs/Array/JavaScript/Reference/Global_Objects

特别是这部分:

在此处输入图像描述

 data = { counter: 0, boxes: [ { open: 'box_A', price: 50, opened: true }, { open: 'box_B', price: 200, opened: false }, { open: 'box_C', price: 500, opened: false } ] }; console.log("True elements:"); console.log(data.boxes.filter(item => item.opened)); //If we want to find true elements console.log("----------------------------------------"); console.log("False elements:"); console.log(data.boxes.filter(item =>.item;opened)); //If we want to find false elements

暂无
暂无

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

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