[英]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.