相关疑难解决方法(0)

JavaScript对象的动态深度设置

给定对象属性路径的字符串,如何动态设置此属性.

给定此示例对象:

var obj = {
    a: {
        b: [ { c: 'Before' } ]
    }
};
Run Code Online (Sandbox Code Playgroud)

它应该能够使用这样的辅助函数设置值:

setToValue(obj, 'After', 'a.b.0.c');
Run Code Online (Sandbox Code Playgroud)

我用以下代码尝试了它.但如果变量不是引用,则父级是副本.

function setToValue(obj, value, path) {
    var arrPath = path.split('.'),
        parent = obj;

    for (var i = 0, max = arrPath.length; i < max; i++) {
        parent = parent[arrPath[i]];
    }

    parent = value;
}
Run Code Online (Sandbox Code Playgroud)

javascript object

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

深度分配JavaScript对象文字

我试图在一个对象中深入分配一个值.例如:

const errors = {}
if(errorOnSpecificField) {
  // TypeError: Cannot read property 'subSubCategory' of undefined(…)
  errors.subCategory.subSubCategory.fieldWithError = 'Error Message'
}
Run Code Online (Sandbox Code Playgroud)

现在,没有lodash,我可以这样做:

const errors = {}
if(errorOnSpecificField) {
    errors.subCategory = errors.SubCategory || {}
    errors.subCategory.subSubCategory = errors.SubCategory.subSubCategory || {}
    errors.subCategory.subSubCategory.fieldWithError = 'Error Message'
}
Run Code Online (Sandbox Code Playgroud)

有了lodash,我可以这样做:

const errors = {}
if(errorOnSpecificField) {
    _.set(errors, 'subCategory.subSubCategory.fieldWithError', 'Error Message');
}
Run Code Online (Sandbox Code Playgroud)

我试图避免使用第三方库.是否有更优雅的解决方案,特别是现在es2015有对象解构.逆操作很简单:

  let {subCategory : {subSubCategory: {fieldWithError}}} = errors
Run Code Online (Sandbox Code Playgroud)

什么是深层对象分配的优雅解决方案?谢谢!

javascript ecmascript-6

8
推荐指数
1
解决办法
165
查看次数

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
查看次数

错误:导入非法重新分配

我正在尝试将模块导入typescript文件,然后与Rollup.js捆绑.

但我收到一条错误消息,阻止Rollup完成.

进口:

import * as mapboxgl from 'mapbox-gl';

(mapboxgl as any).accessToken = this.accessToken;
this.map = new mapbox.Map({...});
Run Code Online (Sandbox Code Playgroud)

当我运行tsc时没有任何错误消息,但是当我运行时:

$ rollup -c rollup.config.js

Illegal reassignment to import 'mapboxgl'
Error: Illegal reassignment to import 'mapboxgl'
at error (C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\utils\error.js:2:14)
at disallowIllegalReassignment (C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\nodes\shared\disallowIllegalReassignment.js:9:4)
at Node.bind (C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\nodes\AssignmentExpression.js:12:3)
at C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\Node.js:6:34
at Node.eachChild (C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\Node.js:21:5)
at Node.bind (C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\Node.js:6:8)
at Node.bind (C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\nodes\BlockStatement.js:8:9)
at Node.bind (C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\nodes\FunctionExpression.js:7:13)
at C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\Node.js:6:34
at Node.eachChild (C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\Node.js:21:5)
Type rollup --help for help, or visit https://github.com/rollup/rollup/wiki
Run Code Online (Sandbox Code Playgroud)

我已经缩小了错误,只有在出现时才会发生(mapboxgl as any).accessToken = this.accessToken;.

我 …

rollup typescript

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

从字符串路径动态更新JavaScript对象

我试图找出是否可以使用字符串作为路径来更新JavaScript对象.

在下面的例子中,我试图找出如何使用store>book>0>price我的路径更新第一本书的价格 .

我知道我可以通过写作来访问它,data['store']['book'][0]['price']但我需要能够动态地执行此操作.我尝试过一些东西,但没有运气.有任何想法吗?

这需要适用于任何深度,而不是固定的深度


数据:

 var data = { 
      "store": {
        "book": [ 
          { "category": "reference",
            "author": "Nigel Rees",
            "title": "Sayings of the Century",
            "price": 8.95
          },
          { "category": "fiction",
            "author": "Evelyn Waugh",
            "title": "Sword of Honour",
            "price": 12.99
          }
        ],
        "bicycle": {
          "color": "red",
          "price": 19.95
        }
      }
    }
var path = "store>book>0>price"
Run Code Online (Sandbox Code Playgroud)

功能:

function updateObject(object, path, data) {
    var pathArray = path.split(">");
    // Some code here
} 
updateObject(data, path, "10.00");
Run Code Online (Sandbox Code Playgroud)

更新

正如费利克斯指出的那样,答案可以在这里找到. JavaScript对象的动态深度设置 …

javascript path object

5
推荐指数
1
解决办法
8306
查看次数

如何通过字符串作为括号表示法获取javascript中的嵌套对象?

我想要一个 javascript 中的方法,它获取一个字符串作为其参数,并从嵌套对象返回一个值,如下所示:

var obj = {
  place: {
    cuntry: 'Iran',
    city: 'Tehran',
    block: 68,
    info: {
     name :'Saeid',
      age: 22
    }
  }
};

function getValue(st) {
  // st: 'place[info][name]'
  return obj['place']['info']['name'] // or obj.place.info.name
}
Run Code Online (Sandbox Code Playgroud)

javascript javascript-objects

4
推荐指数
1
解决办法
1505
查看次数

在nodejs中将excel文件转换为json

我试图通过使用此api:convert-json节点api将excel文件转换为json.

我可以在我的本地计算机上执行此操作,但不能在我的服务器上执行.只有csv-to-json在本地和服务器上运行.这是我的代码:https: //gist.github.com/debasreedash/33efd4473ba8b344a5ac

尝试在第一个console.log之后立即解析excel文件时服务器崩溃.这是它的样子:http: //imgur.com/lzUy8sc

我认为这是一个问题,在服务器上没有excel驱动程序,但下载和安装后它也无法正常工作.有人遇到过这个问题吗?如果您需要更多信息,请告诉我.

javascript excel json node.js

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