gpt4 book ai didi

javascript - 带引用的字符串到对象

转载 作者:行者123 更新时间:2023-11-30 08:28:39 24 4
gpt4 key购买 nike

当字符串中存在引用时,如何将字符串转换为对象?

字符串:

{ "field": "OrderNumber", "operator": "eq", "value" : e.data.OrderNumber }

我已经尝试使用 JSON.parse 和 eval,但我仍然在“e.data.OrderNumber”上遇到错误

最佳答案

"value" 设置为空字符串。以 str 作为参数调用 JSON.parse()。设置结果对象的 .value

var str = `{"field":"OrderNumber","operator":"eq","value":""}`;

var obj = JSON.parse(str);

obj.value = e.data.OrderNumber;

另一种方法是利用 JSON.parse() reviver函数,使用 Function.prototype.bind()this 设置为 e。如果 key 等于函数中的 "value" 创建一个变量 val,其中值最初设置为 undefined。使用 .split()key “value” 中创建属性表示数组。 .slice() 结果数组中 0 之后的索引。使用for..of循环通过obj[arrayIndex][propN]获取obj[arrayIndex]的值,其中propN 是数组的第n个索引;将值分配给变量 val。返回循环后的变量val,否则返回value参数。

var e = {
data: {
OrderNumber: 1
}
};

var str = '{"field":"OrderNumber","operator":"eq","value":e.data.OrderNumber}';

str = str.replace(/((\w+.[\w.]+)(?=(\s+|)\}))/g, "\"$1\"");

var rev = function(key, value) {
if (key === "value") {
let [props, val] = [value.split(".").slice(1), void 0];
for (let prop of props) {
val = val === undefined ? this[prop] : val[prop];
}
return val;
}
return value;
};

var obj = JSON.parse(str, rev.bind(e));

console.log(obj);

您还可以使用 String.prototype.replace()RegExp /((\w+.[\w.]+)(?=(\s+|)\}))/g 以匹配后跟 的单词字符。 后跟多个单词字符之一和 字符; String.prototype.match() 匹配单词字符并根据匹配创建一个数组; Array.prototype.reduce() 为数组.length迭代对象属性的每个深度,返回数组.length<深度处的最后一个值 对应于原始字符串中的对象属性。

const e = {
data: {
OrderNumber: 1
}
};

let str = '{ "field": "OrderNumber", "operator": "eq", "value" : e.data.OrderNumber }';

str = str.replace(/((\w+.[\w.]+)(?=(\s+|)\}))/g, function(match) {
let [,...props] = match.match(/[^.]+/g);
return props.reduce(function(obj, prop) {
return obj[prop]
}, e);
});

let obj = JSON.parse(str);

console.log(obj);

通过在原始字符串上调用 .match().shift().split() 得到的结果数组,您可以获得来自 e 的属性值具有解构赋值;使用 .replace() 将替换字符串设置为来自 e 的相应值;然后使用结果字符串作为值调用 JSON.parse() 以创建 javascript 对象。

const e = {
data: {
OrderNumber: 1
}
};

let str = '{ "field": "OrderNumber", "operator": "eq", "value" : e.data.OrderNumber }';

let re = /((\w+.[\w.]+)(?=(\s+|)\}))/g;

let obj = JSON.parse(str.replace(re
, (() => ([,...props] = str.match(re).shift().split(".")
, {[props[0]]:{[props[1]]:prop}} = e, prop)
)()
));

console.log(obj);

关于javascript - 带引用的字符串到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41192023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com