给定对象属性路径的字符串,如何动态设置此属性.
给定此示例对象:
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) 我试图在一个对象中深入分配一个值.例如:
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)
什么是深层对象分配的优雅解决方案?谢谢!
我有一堆对象属性以点分隔的字符串形式出现"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这与引用的副本不同.也就是说,我需要能够为同一个对象多次执行此分配,并且"重复"答案将每次只覆盖子键.请重新开启!
我正在尝试将模块导入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;.
我 …
我试图找出是否可以使用字符串作为路径来更新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 中的方法,它获取一个字符串作为其参数,并从嵌套对象返回一个值,如下所示:
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)
我试图通过使用此api:convert-json节点api将excel文件转换为json.
我可以在我的本地计算机上执行此操作,但不能在我的服务器上执行.只有csv-to-json在本地和服务器上运行.这是我的代码:https: //gist.github.com/debasreedash/33efd4473ba8b344a5ac
尝试在第一个console.log之后立即解析excel文件时服务器崩溃.这是它的样子:http: //imgur.com/lzUy8sc
我认为这是一个问题,在服务器上没有excel驱动程序,但下载和安装后它也无法正常工作.有人遇到过这个问题吗?如果您需要更多信息,请告诉我.
javascript ×6
object ×3
arrays ×1
ecmascript-6 ×1
excel ×1
json ×1
lodash ×1
node.js ×1
path ×1
rollup ×1
typescript ×1