Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中从数组进入对象?_Javascript_Arrays_Object_Recursion - Fatal编程技术网

在javascript中从数组进入对象?

在javascript中从数组进入对象?,javascript,arrays,object,recursion,Javascript,Arrays,Object,Recursion,如何使用数组进入对象并设置值?最好不使用eval,执行类似object[eval([“key”,“deepkey]”)的操作。拆分(“”)=“newvalue” 手动执行时,我只需执行object.key.deepkey=“newvalue”,但同样,我需要使用数组来访问正确的属性 参考对象: object = { key: { deepKey: "value" } } 可以将数组类型语法编写为 如果数组中有键,则可以执行此操作 var keys = ['key','deepk

如何使用数组进入对象并设置值?最好不使用eval,执行类似
object[eval([“key”,“deepkey]”)的操作。拆分(“”)=“newvalue”

手动执行时,我只需执行
object.key.deepkey=“newvalue”
,但同样,我需要使用数组来访问正确的属性

参考对象:

object = {
  key: {
    deepKey: "value"
  }
}

可以将数组类型语法编写为

如果数组中有键,则可以执行此操作

var keys = ['key','deepkey'];
var obj = object;
for(var k =0; k <keys.length-1; k++){
   obj= obj[keys[k]];
}
obj[keys[k]] = 'newvalue'
var-keys=['key','deepkey'];
var obj=对象;

对于(var k=0;k,可以将数组类型语法编写为

如果数组中有键,则可以执行此操作

var keys = ['key','deepkey'];
var obj = object;
for(var k =0; k <keys.length-1; k++){
   obj= obj[keys[k]];
}
obj[keys[k]] = 'newvalue'
var-keys=['key','deepkey'];
var obj=对象;

对于(var k=0;k,可以使用递归函数逐步遍历数组(或对象)的每个级别,如下所示:

如果要获取对象引用,只需指定第二个参数,直到:

var obj = {
    a: {
        b: {
            c: 'foo'
        }
    }
};

var ref = val(obj, ['a', 'b']);

//ref is now obj.a.b, so you can do something like...
ref.x = 'bar';

console.dir(ref); //outputs something like { c: 'foo', x: 'bar' }

您可以使用递归函数逐步遍历数组(或对象)的每个级别,如下所示:

如果要获取对象引用,只需指定第二个参数,直到:

var obj = {
    a: {
        b: {
            c: 'foo'
        }
    }
};

var ref = val(obj, ['a', 'b']);

//ref is now obj.a.b, so you can do something like...
ref.x = 'bar';

console.dir(ref); //outputs something like { c: 'foo', x: 'bar' }

您可以从中获取函数并对其进行返工,以访问对象的属性

var getPropByName=函数(propName,上下文){
var namespace=propName.split('.');
for(var i=0;i
您可以从中获取函数并对其进行返工,以访问对象的属性

var getPropByName=函数(propName,上下文){
var namespace=propName.split('.');
for(var i=0;i
另一种方法是使用
Array.map

function deepkey(obj,keys,set){
  var i=1
     ,kys = keys.split('.')
     ,exist = kys.map( function(k){
          var prev = this[i-1], isobj = prev.constructor === Object;
          this.push( isobj && k in prev ? prev[k] : prev);
          return (i++,this[i-1]);},
          [obj]
        )
     ,x = exist[exist.length-2];
  if (x && x.constructor === Object && set){
    x[kys[kys.length-1]] = set;
  }
  return x[kys.pop()] || null;
} 
// usage
var obj = { a:{ b:{ c:1, cc:{ d:{ e:{ a:1,b:2,c:3 } } } } } };
// assign [1,2,3,4,5] to obj.a.b.cc.d.e.b
console.log(deepkey(obj,'a.b.cc.d.e.b',[1,2,3,4,5])); //=> [1,2,3,4,5]
// get obj.a.b.cc.d.e.b[2]
console.log(deepkey(obj,'a.b.cc.d.e.b')[2]); //=> 3
// get non existing path obj.a.b.c.d.e.b
console.log(deepkey(obj,'a.b.c.d.e.b')); //=> null

另一种方法是通过以下方式使用
Array.map

function deepkey(obj,keys,set){
  var i=1
     ,kys = keys.split('.')
     ,exist = kys.map( function(k){
          var prev = this[i-1], isobj = prev.constructor === Object;
          this.push( isobj && k in prev ? prev[k] : prev);
          return (i++,this[i-1]);},
          [obj]
        )
     ,x = exist[exist.length-2];
  if (x && x.constructor === Object && set){
    x[kys[kys.length-1]] = set;
  }
  return x[kys.pop()] || null;
} 
// usage
var obj = { a:{ b:{ c:1, cc:{ d:{ e:{ a:1,b:2,c:3 } } } } } };
// assign [1,2,3,4,5] to obj.a.b.cc.d.e.b
console.log(deepkey(obj,'a.b.cc.d.e.b',[1,2,3,4,5])); //=> [1,2,3,4,5]
// get obj.a.b.cc.d.e.b[2]
console.log(deepkey(obj,'a.b.cc.d.e.b')[2]); //=> 3
// get non existing path obj.a.b.c.d.e.b
console.log(deepkey(obj,'a.b.c.d.e.b')); //=> null

你能说明你想做什么吗?请给出你的工作评估版本。你能说明你想做什么吗?请给出你的工作评估版本。当然,但这只适用于两级对象,我知道第一级对象名为
key
。我需要能够在未知级别上设置嵌套值。你可以通过对象使用for in设置值。当然,但这只适用于两级对象,其中我知道第一级命名为
key
。我需要能够在未知级别上设置嵌套值。您可以使用for in迭代对象并设置值。这很好,但如何在您的中设置
b
的值例如?@Industrial我很抱歉我不太明白你的意思…
obj.a.b=foo
?或者你真的想用这个函数来获取对
b
的引用,而不是从中返回值吗?这很好,但是在你的例子中如何设置
b
的值呢?@Industrial我很抱歉我不太了解您的意思是…
obj.a.b=foo
?或者您真的想使用此函数获取对
b
的引用,而不是从中返回值吗?