将数组转换为对象javascript

时间:2016-02-29 20:41:19

标签: javascript

我有以下数组:

["recordList", "userList", "lastChanged"]

我想要这样的事情:

lastChangedValue = "231231443234";        

var object = {};

object = {
   recordList: {
       userList: {
         lastChanged: lastChangedValue 
      }
   }
}

我怎么能这样做? 提前谢谢。

4 个答案:

答案 0 :(得分:2)

试试这个:



var array = ["recordList", "userList", "lastChanged"];


var value = "231231443234";        

function arrayToObject(array, object, value) {
  var ref = object;
  for (var i=0; i<array.length-1; ++i) {
    if (!ref[array[i]]) {
        ref[array[i]] = {};
    }
    ref = ref[array[i]]
  }
  ref[array[array.length-1]] = value;
  return object;
}
alert(JSON.stringify(arrayToObject(array, {}, value)));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以遍历属性名称并在每次迭代中创建一个新对象的嵌套级别:

var props = ["recordList", "userList", "lastChanged"];
var lastChangedValue = "231231443234";

var obj = {}
var nested = obj;
props.forEach(function(o, i) {
    nested[o] = i === props.length - 1 ? lastChangedValue : {};
    nested = nested[o];
});

console.log(obj);

答案 2 :(得分:1)

可能有很多方法可以做到,一种方法是使用reduce

var keys = ["recordList", "userList", "lastChanged"];
var temp = keys.slice().reverse(),
    lastChangedValue = "231231443234";  
var result = temp.reduce( function (obj, val, ind, arr) {
  if (ind===0) {
    obj[val] = lastChangedValue;
    return obj;
  } else {
    var x = {};
    x[val] = obj;
    return x;
  }
}, {});
console.log(result);

答案 3 :(得分:1)

使用递归求解

&#13;
&#13;
var fields = ["recordList", "userList", "lastChanged"];
lastChangedValue = "231231443234";
var object = {};

(function addFields(o, i, v) {
    if (i == fields.length - 1) {
        o[fields[i]] = v;
        return;
    }
    o[fields[i]] = {};
    addFields(o[fields[i]], ++i, v)
})(object, 0, lastChangedValue);


alert(JSON.stringify(object));
&#13;
&#13;
&#13;