gpt4 book ai didi

javascript - 在 map : recursive function in javascript 中找到可能的路径

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:59:46 24 4
gpt4 key购买 nike

doc = {
'a': {
'b': {
'c': 'hello'
},
'd': {
'c': 'sup',
'e': {
'f': 'blah blah blah'
}
}
}
}

function get(json, path) {
var str = path.split('.');
var temp = json;
var arr = [];
var keystr = "";
for (var i = 0; i < str.length; i++) {
if (str[i] != "*") {

keystr += str[i] + ".";

if (temp[str[i]] === undefined)
break;
else {
temp = temp[str[i]];
if (i == str.length - 1) {
var nObj = {};
nObjKey = keystr.substr(0, keystr.length - 1);
nObj[nObjKey] = temp
// console.log("Obj check" + JSON.stringify(nObj) + keystr)
arr.push(nObj);
}
}
} else {
for (var key in temp) {
var concat = key + "."
for (var j = i + 1; j < str.length; j++)
concat += str[j] + ".";
if (temp[key] !== undefined && temp[key] instanceof Object) {

var m = keystr + concat.substr(0, concat.length - 1);
var obj = (get(temp, concat.substr(0, concat.length - 1)));

if (obj != "") {
// console.log("existing arr "+JSON.stringify(arr))
obj[m] = (obj[0])[concat.substr(0, concat.length - 1)]
// console.log("hello "+JSON.stringify(obj) + " end hello")
arr.push(obj);
}
} else if (temp[key] !== undefined && i == str.length - 1) {
// arr.push(temp);
}
}
}
}
return arr;
}

var result = (get(doc, 'a.*.e'))
console.log(result)

对于 'a.*.e' 的输入,输出应该是 {'a.d.e': {'f': 'blah blah blah'}}} .但是我也在数组中得到了所有通配符的替代品。我确定有问题但无法检测到。帮助将不胜感激。

最佳答案

您可以使用递归方法和经常提前退出范例稍微更改操作的结构,并检查带有退出选项的单个部分,例如

  • 长度,找到部分结果,
  • 是否为虚假对象类型,
  • 索引处的部分是星号,然后迭代对象中的所有键,或者
  • index处的部分是key,然后再调用函数。

最后,使用找到的路径,连接路径并使用对象的实际值生成一个新属性。

function get(object, path) {

function iter(o, p, i) {
if (i === parts.length) {
result[p.join('.')] = o;
return;
}
if (!o || typeof o !== 'object') {
return;
}
if (parts[i] === '*') {
Object.keys(o).forEach(function (k) {
iter(o[k], p.concat(k), i + 1);
});
return;
}
if (parts[i] in o) {
iter(o[parts[i]], p.concat(parts[i]), i + 1);
}
}

var result = {},
parts = path.split('.');

iter(object, [], 0);
return result;
}

var doc = { a: { b: { c: 'hello' }, d: { c: 'sup', e: { f: 'blah blah blah' } } } };

console.log(get(doc, 'a.*.e'));
console.log(get(doc, 'a.*.c'));
.as-console-wrapper { max-height: 100% !important; top: 0; }

版本以 * 作为任何级别的通配符。

function get(object, path) {

function iter(o, p, i) {
if (i === parts.length) {
result[p.join('.')] = o;
return;
}
if (!o || typeof o !== 'object') {
return;
}
if (parts[i] === '*') {
Object.keys(o).forEach(function (k) {
iter(o[k], p.concat(k), i);
iter(o[k], p.concat(k), i + 1);
});
return;
}
if (parts[i] in o) {
iter(o[parts[i]], p.concat(parts[i]), i + 1);
}
}

var result = {},
parts = path.split('.');

iter(object, [], 0);
return result;
}

var doc = { a: { b: { c: 'hello' }, d: { c: 'sup', e: { f: 'blah blah blah' } } } };

console.log(get(doc, 'a.*.e'));
console.log(get(doc, 'a.*.c'));
console.log(get(doc, 'a.*.f'));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 在 map : recursive function in javascript 中找到可能的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43153912/

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