使用嵌套数组过滤器组合过滤JSON数组

时间:2018-01-17 06:54:48

标签: javascript arrays json

我正在编写一个JS代码,必须根据条件过滤JSON数据。我昨天发布了一个问题,但没有在How to filter data from a json response尝试任何事情,它被投了票,因为我没有尝试任何我很好的事情。我已经尝试过使用过滤器了,但不幸的是我有一个数组中的数组,在这里我被卡住了。这是我的代码。

var arr2 = [
  [{
    "max": "0.685",
    "target_state": "6",
    "ingredients": "a",
    "rule_no": "7",
    "id": "18"
  }, {
    "max": "14",
    "target_state": "6",
    "ingredients": "b",
    "rule_no": "7",
    "id": "17"
  }],
  [{
    "max": "14",
    "target_state": "7",
    "ingredients": "b",
    "rule_no": "8",
    "id": "19"
  }, {
    "max": "1.36",
    "target_state": "7",
    "ingredients": "a",
    "rule_no": "8",
    "id": "20"
  }]
];

var result = arr2.reduce(function(a, b) {
    return a.concat(b);
  })
  .filter(function(obj) {
    return (obj.max == 0.685 && obj.ingredients === "a")
  });

alert(JSON.stringify(result[0].target_state));

当我运行此代码时,我得到的结果为“6”。

但是我的条件是这样((obj.max == 0.685 && obj.ingredients === "a") && (obj.max == 14 && obj.ingredients === "b")),但这并没有返回任何东西。

此处预期输出为"6"

这是一个工作小提琴https://jsfiddle.net/vjt45xv4/14/

请让我知道我哪里出错了,我该怎么办呢。

由于

1 个答案:

答案 0 :(得分:1)

我想我明白你要在这里实现的目标。

下一个怎么样?它对我有用。

var result = arr2
  .filter(function(objs) {
    return ((objs.find((obj) => obj.ingredients === "a" ).max == 0.685) 
&& (objs.find((obj) => obj.ingredients === "b" ).max == 14));
  })
  .reduce(function(a, b) {
    return a.concat(b);
  });