相关疑难解决方法(0)

测试是否存在嵌套的JavaScript对象键

如果我有一个对象的引用:

var test = {};
Run Code Online (Sandbox Code Playgroud)

可能(但不是立即)有嵌套对象,如:

{level1: {level2: {level3: "level3"}}};
Run Code Online (Sandbox Code Playgroud)

在最深层嵌套的对象中测试密钥是否存在的最佳方法是什么?

alert(test.level1);收益率undefined,但alert(test.level1.level2.level3);失败了.

我现在正在做这样的事情:

if(test.level1 && test.level1.level2 && test.level1.level2.level3) {
    alert(test.level1.level2.level3);
}
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更好的方法.

javascript nested properties object

616
推荐指数
19
解决办法
21万
查看次数

使用字符串键访问嵌套的JavaScript对象

我有这样的数据结构:

var someObject = {
    'part1' : {
        'name': 'Part 1',
        'size': '20',
        'qty' : '50'
    },
    'part2' : {
        'name': 'Part 2',
        'size': '15',
        'qty' : '60'
    },
    'part3' : [
        {
            'name': 'Part 3A',
            'size': '10',
            'qty' : '20'
        }, {
            'name': 'Part 3B',
            'size': '5',
            'qty' : '20'
        }, {
            'name': 'Part 3C',
            'size': '7.5',
            'qty' : '20'
        }
    ]
};
Run Code Online (Sandbox Code Playgroud)

我想使用这些变量访问数据:

var part1name = "part1.name";
var part2quantity = "part2.qty";
var part3name1 = "part3[0].name";
Run Code Online (Sandbox Code Playgroud)

part1name应该用someObject.part1.name's值填充,即"Part …

javascript jquery nested path

410
推荐指数
16
解决办法
18万
查看次数

将字符串转换为模板字符串

是否可以将模板字符串创建为通常的字符串

let a="b:${b}";
Run Code Online (Sandbox Code Playgroud)

然后将其转换为模板字符串

let b=10;
console.log(a.template());//b:10
Run Code Online (Sandbox Code Playgroud)

没有eval,new Function以及动态代码生成的其他方法?

javascript eval ecmascript-6 template-strings

128
推荐指数
11
解决办法
5万
查看次数

使用点表示法字符串访问对象子属性

我暂时坚持看似简单的JavaScript问题,但也许我只是错过了正确的搜索关键字!

假设我们有一个对象

var r = { a:1, b: {b1:11, b2: 99}};
Run Code Online (Sandbox Code Playgroud)

有几种方法可以访问99:

r.b.b2
r['b']['b2']
Run Code Online (Sandbox Code Playgroud)

我想要的是能够定义一个字符串

var s = "b.b2";
Run Code Online (Sandbox Code Playgroud)

然后使用访问99

r.s or r[s] //(which of course won't work)
Run Code Online (Sandbox Code Playgroud)

一种方法是为它编写一个函数,在字符串上拆分字符串,也可以递归/迭代地获取属性.但是有更简单/更有效的方法吗?在这里的任何jQuery API中有用吗?

javascript jquery

102
推荐指数
7
解决办法
5万
查看次数

以点表示法转换字符串以获取对象引用

在javascript中考虑这个对象,

var obj = { a : { b: 1, c: 2 } };
Run Code Online (Sandbox Code Playgroud)

给定字符串"obj.ab"我如何获得这个引用的对象,以便我可以改变它的值?即我希望能够做类似的事情

obj.a.b = 5;
obj.a.c = 10;
Run Code Online (Sandbox Code Playgroud)

其中"obj.ab"和"obj.ac"是字符串(不是obj引用).我遇到过这篇帖子,我可以得到点符号字符串引用obj的值,但我需要的是一种可以获取对象本身的方法吗?

物体的嵌套可能比这更深.也许是

var obj = { a: { b: 1, c : { d : 3, e : 4}, f: 5 } }
Run Code Online (Sandbox Code Playgroud)

javascript syntax object

33
推荐指数
2
解决办法
2万
查看次数

Javascript:将字符串解释为对象引用?

可能重复:
Javascript使用变量作为对象名称

如何让JS将字符串视为对先前定义的对象的引用?简化:

var myObject = new MyObject();

var myString = "myObject";

var wantThisToWork = myString.myproperty;
Run Code Online (Sandbox Code Playgroud)

javascript

25
推荐指数
3
解决办法
3万
查看次数

使用JavaScript从对象中删除

我有一个如下所示的对象:

const arr = [
  {
    name: 'FolderA',
    child: [
      {
        name: 'FolderB',
        child: [
          {
            name: 'FolderC0',
            child: [],
          },
          {
            name: 'FolderC1',
            child: [],
          },
        ],
      },
    ],
  },
  {
    name: 'FolderM',
    child: [],
  },
];
Run Code Online (Sandbox Code Playgroud)

我有一个字符串的路径:

var path = "0-0-1".
Run Code Online (Sandbox Code Playgroud)

我必须删除该对象:

{
    name: 'FolderC1',
    child: [],
 },
Run Code Online (Sandbox Code Playgroud)

我可以这样做,

arr[0].child[0].splice(1, 1);
Run Code Online (Sandbox Code Playgroud)

但我想动态地做.由于路径字符串可以是任何东西,我想要上面的"." 要动态创建的运算符和拼接定义,以便在特定位置进行拼接.

javascript object

17
推荐指数
1
解决办法
917
查看次数

将带有点表示法的字符串转换为JSON

给定一个字符串作为点符号,我将如何从该字符串创建一个对象(检查已存在的属性):例如

var obj = {};
stringToObj('a.b', 'value1', obj);
stringToObj('a.b.c', 'value2', obj);
Run Code Online (Sandbox Code Playgroud)

会产生

{
   "a": {
    "b": {
        "_x": "value1",
        "c": {
            "_x": "value2"
        }
    }
    }
 }
Run Code Online (Sandbox Code Playgroud)

我看这个问题,并且这一个,但既不似乎足以什么Im做.

有什么想法吗?

javascript object

9
推荐指数
2
解决办法
4554
查看次数

Javascript:将点分隔的字符串转换为嵌套的对象值

我有一堆对象属性以点分隔的字符串形式出现"availability_meta.supplier.price",我需要为其分配相应的值record['availability_meta']['supplier']['price']等等.

并非所有东西都是3级深度:许多只有1级深度,而且许多深度超过3级.

有没有一种很好的方法在Javascript中以编程方式分配?例如,我需要:

["foo.bar.baz", 1]  // --> record.foo.bar.baz = 1
["qux.qaz", "abc"]  // --> record.qux.qaz = "abc"
["foshizzle", 200]  // --> record.foshizzle = 200
Run Code Online (Sandbox Code Playgroud)

我想我可以一起破解某些东西,但我没有任何好的算法,所以会很感激建议.我正在使用lodash,如果它有用,并对其他可以快速完成此工作的库开放.

编辑它在后端并且不经常运行,因此没有必要优化大小,速度等.实际上代码可读性对于未来的开发者来说将是一个加分.

编辑2这与引用的副本不同.也就是说,我需要能够为同一个对象多次执行此分配,并且"重复"答案将每次只覆盖子键.请重新开启!

javascript arrays object lodash

7
推荐指数
3
解决办法
5007
查看次数

具有动态名称的嵌套对象属性

上下文:我正在为我的应用程序设置编写一个 Redux reducer(尽管这个问题不是 Redux 特定的),它是一个嵌套对象。我想使用动态给出的属性名称修改设置对象。

例子:

const settings = {
  service: {
    username: 'TEST',
    password: ''
  }
}

// Normally this would be passed by Redux, but for the purposes of this exercise it's hardcoded

const settingKey = 'service.username';

console.log(settings[settingKey]); // undefined

console.log(eval(`settings.${settingKey}`)); // works, but bad
Run Code Online (Sandbox Code Playgroud)

我能想到在不使用 eval 的情况下访问子对象的唯一方法是使用正则表达式将其拆分settingKey为其组成部分:

const match = /(.+)\.(.+)/.exec(settingKey);
console.log(settings[match[1]][match[2]];
Run Code Online (Sandbox Code Playgroud)

const match = /(.+)\.(.+)/.exec(settingKey);
console.log(settings[match[1]][match[2]];
Run Code Online (Sandbox Code Playgroud)

这有效,但是

  1. 它很丑
  2. 它不适用于更深层嵌套的对象

有没有一种方法可以在不使用正则表达式或 eval 的情况下使用动态名称访问嵌套对象的属性?

javascript

7
推荐指数
1
解决办法
1975
查看次数