将项目添加到数组中,而不是用新值覆盖当前值

时间:2018-11-27 16:11:07

标签: javascript arrays

我试图弄清楚如何将新项目添加到数组中,而不是用新值覆盖当前值。我正在使用.push(),它应在每次通过数组映射时添加该项目。有任何想法吗?

const searchChips = [
{value: "string"}, {value: "test"}
];
const query = {
        bool: {
            filter: []
        }
    };
const searchQuery = {
  query_string: {
    query: ""
  }
};
searchChips.map(chip => {
  console.log(chip);
  const key = "query";
  searchQuery.query_string[key] = chip.value;
  query.bool.filter.push(searchQuery);
});
console.log(query);

enter image description here

2 个答案:

答案 0 :(得分:0)

问题似乎是您在query.bool.filter函数之外推入.map()。试试这个。

const searchChips = [{ value: "string" }, { value: "test" }];
const query = {
  bool: {
    filter: []
  }
};

searchChips.forEach(chip => {
  const key = "query";
  const searchQuery = {
    query_string: {
      query: ""
    }
  };
  searchQuery.query_string[key] = chip.value;
  query.bool.filter.push(searchQuery);
});
console.log(JSON.stringify(query));

答案 1 :(得分:0)

由于要处理对searchQuery的相同完全引用,因此您要插入相同的查询。与其尝试将此功能作为返回对象的函数,不如尝试

const searchChips = [{
  value: "string"
}, {
  value: "test"
}];

const query = {
  bool: {
    filter: []
  }
};

let sq = (query) => ({
  query_string: {query}
});

searchChips.map(chip => query.bool.filter.push(sq(chip.value)));
console.log(query);

这将返回给您两个query_string具有不同值的过滤器,因为现在该函数将返回一个全新的对象,而不是您处理相同的引用。