我试图弄清楚如何将新项目添加到数组中,而不是用新值覆盖当前值。我正在使用.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);
答案 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
具有不同值的过滤器,因为现在该函数将返回一个全新的对象,而不是您处理相同的引用。