对象内的javascript步骤以变量填充

时间:2019-02-06 12:12:22

标签: javascript object variables

我尝试动态地深入对象内部。对象子对象是未知的,应该从字符串中使用。

希望您能在下面看到我的尝试。我将无法解决的部分注释掉了。

var global_object = {};

function populate(id, text) {
  let parts = id.split('/');

  for(let key in parts) {
    let part = parts[key];
    // global_object['this']['is']['a']['long']['url'] = text;
    console.log(part);
  }
}

populate('this/is/a/long/url', 'My text');

结果可能是这样的:

this: {
  is: {
    a: {
      long: {
        url: "My text"
      }
    }
  }
}

https://jsfiddle.net/2f6kue74/

ES6解决方案也被接受

4 个答案:

答案 0 :(得分:1)

您可以执行以下操作,存储var obj,然后每回合将i放入新密钥中。然后,对于文本,使用另一个var来“记住”最后一个。

var global_object = {};

function populate(id, text) {
  let parts = id.split('/');
  let obj = global_object, last_obj, part;

  for(let key in parts) {
    part = parts[key];
    last_obj = obj;      
    obj[part] = {};
    obj = obj[part]
    console.log(part);
  }
  last_obj[part] = text;
}

populate('this/is/a/long/url', 'My text');
console.log(global_object);

答案 1 :(得分:1)

不包含外部变量的自包含替代递归解决方案

const populate = (id, text, result) => {
  const arr = id.split('/');
  let key = arr.shift();
  if(key) { 
    result[key] = {};
    if(!arr.length) { result[key] = text; }
    populate(arr.join("/"), text, result[key])
  }
  return result;
}

console.log(populate('this/is/a/long/url', 'My text', {}));

答案 2 :(得分:0)

类似的事情应该起作用。 obj是要填充的当前对象,并随for循环的每次迭代进行更新。

let obj = global_object;
function populate(id, text) {
    let parts = id.split('/');

    for (let key in parts) {
        let part = parts[key];
        obj[part] = {};
        obj = obj[part];

    }
    obj = text;
}

答案 3 :(得分:0)

或减少它

var global_object = {};

function populate(id, text) {
    global_object = id.split("/").reduceRight((acc, part) => {
        var nested = JSON.parse(JSON.stringify(acc));

        acc = {};
        acc[part] = nested;

        return acc;
    }, text);
}

populate("this/is/a/long/url", "My text");