我有一个像这样的对象,需要将其发送到API-
var data = {
field : "category"
value : "order"
}
现在,此API还需要一些作为嵌套对象发送的条件。像这样-
var data ={
field : "category"
value : "order"
AND : {
field : "circuit"
value : "ninth"
OR : {
field : "second"
value : "abc",
//more conditions here possible //
}
}
因此,基本上,条件嵌套在条件内。 编辑::注意-添加到条件数组中的每个条件都必须嵌套到先前条件中
现在,我有一系列条件-
conditionsArray = [
{filter: "AND", field: "circuit", value: "ninth"},
{filter: "OR", field: "second", value: "abc"}
]
如何以最佳方式将条件从此条件数组添加到数据对象?
var data = {
field : "category"
value : "order"
}
谢谢您的时间。
编辑:对不起,我忘了添加到目前为止我已经尝试过的内容-
我一直试图只是形成一个对象,但这绝不是一个好的解决方案。
const check = () => {
console.log(conditionsArray);
const data: any = { ...fieldValue };
conditionsArray.forEach((condition: any) => {
const { filter, name, value } = condition;
const { AND, OR, NOT } = data;
if (AND || OR || NOT) {
if (AND) {
data["AND"][filter] = { name, value };
}
if (OR) {
data["OR"][filter] = { name, value };
}
if (NOT) {
data["NOT"][filter] = { name, value };
}
} else {
data[filter] = { name, value };
}
});
console.log(data,"log data");
};
答案 0 :(得分:1)
如果您的non-root
项目应按出现的顺序添加到root
中,则可以采用以下递归方式:
conditionsArray
data
答案 1 :(得分:1)
您可以缩小数组并返回嵌套对象以进行下一次迭代。
const
data = { field: "category", value: "order" },
conditionsArray = [{ filter: "AND", field: "circuit", value: "ninth" }, { filter: "OR", field: "second", value: "abc" }];
conditionsArray.reduce((o, { filter, ...rest }) => o[filter] = rest, data);
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:1)
使用递归:
function addConditions(data, conditions) {
if (conditions.length == 0) { return data; }
var topMostCondition = conditions[0];
var objectToAdd = { field : topMostCondition.field, value : topMostCondition.value };
data[topMostCondition.filter] = addConditions(objectToAdd, conditions.splice(1));
return data;
}