Javascript 如何用2“初始化对象变量;步骤:`objectVariable[step1][step2]=结果`
原始问题:Javascript 如何用2“初始化对象变量;步骤:`objectVariable[step1][step2]=结果`,javascript,variables,ecmascript-6,javascript-objects,reduce,Javascript,Variables,Ecmascript 6,Javascript Objects,Reduce,原始问题: let that = this; let result = null; let temp = {}; this.activeUsers.forEach( user => { result = Object.values(window.datas).reduce( (newObj, dataRow) => { if ( (user.user_id == dataRow.user_id) && (that.dataRe
let that = this;
let result = null;
let temp = {};
this.activeUsers.forEach( user => {
result = Object.values(window.datas).reduce( (newObj, dataRow) => {
if ( (user.user_id == dataRow.user_id) && (that.dataResult[dataRow.data_id] !== undefined) && (that.dataResult[dataRow.data_id].length !== 0) ) {
newObj[that.catToApp[that.dataResult[dataRow.data_id].cat_id].app_name][that.dataResult[dataRow.data_id].ts] = that.dataResult[dataRow.data_id];
}
return newObj;
}, {} );
if (Object.entries(result).length !== 0) {
that.usersToDatas[user.user_id] = result;
}
temp = {};
});
我正在尝试创建一个新对象,但插入有点复杂:
我正在对象内部生成一个对象
result = Object.values(window.datas).reduce( (newObj, dataRow) => {
if ( (user.user_id == dataRow.user_id) && (that.dataResult[dataRow.data_id] !== undefined) && (that.dataResult[dataRow.data_id].length !== 0) ) {
newObj[that.catToApp[that.dataResult[dataRow.data_id].cat_id].name][that.dataResult[dataRow.data_id].ts] = that.dataResult[dataRow.data_id];
}
return newObj;
}, {} );
我得到这个错误:
v-on处理程序中出错:“TypeError:无法设置未定义的属性“2017-02-01”
在线:
newObj[that.catToApp[that.dataResult[dataRow.data_id].cat_id].name][that.dataResult[dataRow.data_id].ts] = that.dataResult[dataRow.data_id];
我的尝试:
let that = this;
let result = null;
let temp = {};
this.activeUsers.forEach( user => {
result = Object.values(window.datas).reduce( (newObj, dataRow) => {
if ( (user.user_id == dataRow.user_id) && (that.dataResult[dataRow.data_id] !== undefined) && (that.dataResult[dataRow.data_id].length !== 0) ) {
newObj[that.catToApp[that.dataResult[dataRow.data_id].cat_id].app_name][that.dataResult[dataRow.data_id].ts] = that.dataResult[dataRow.data_id];
}
return newObj;
}, {} );
if (Object.entries(result).length !== 0) {
that.usersToDatas[user.user_id] = result;
}
temp = {};
});
主要问题: 以这种方式设置对象变量的正确方法是什么:
objectVariable[step1][step2] = result;
完整代码:
let that = this;
let result = null;
let temp = {};
this.activeUsers.forEach( user => {
result = Object.values(window.datas).reduce( (newObj, dataRow) => {
if ( (user.user_id == dataRow.user_id) && (that.dataResult[dataRow.data_id] !== undefined) && (that.dataResult[dataRow.data_id].length !== 0) ) {
newObj[that.catToApp[that.dataResult[dataRow.data_id].cat_id].app_name][that.dataResult[dataRow.data_id].ts] = that.dataResult[dataRow.data_id];
}
return newObj;
}, {} );
if (Object.entries(result).length !== 0) {
that.usersToDatas[user.user_id] = result;
}
temp = {};
});
可以使用函数查看对象是否具有属性
例如
let myObject = {};
let prop = "myProperty";
let prop 2 = "mySecondProperty"
if(!myObject.hasOwnProperty(prop)){
myObject[prop] = {};
}
myObject[prop][prop2] = ....
如果没有定义“myObject[prop]”,您可以在循环中使用它并设置“default”值您可以执行(objectVariable[step1]=objectVariable[step1]|{})
var objectVariable={};
var step1='a';
var step2='b';
var result='hello world';
(objectVariable[step1]=objectVariable[step1]| |{})[step2]=结果;
console.log(objectVariable)
自从ECMAScript 2015(ES6)以来,您可以通过以下方式声明对象:
const step1='firstStep',step2='secondStep';
设obj={
[步骤1]:{
[步骤2]:“值”
}
};
console.log(obj[step1][step2])代码>关于objectVariable[step1][step2]=result
,您可以使用Object.assign加上计算属性,如:
constmyobj={someProp:“someValue”};
const foo=“propertyFoo”;
const bar=“propertyBar”;
赋值(myObj,{[foo]:{[bar]:“baz”});
console.log(myObj)
能否请您添加一个window.datas
示例,以便我们查看数据结构?试图通过阅读这些冗长的陈述来理解它是令人讨厌的。您是否可以控制window.datas的结构?因为从代码判断,如果数据是数组,代码可能会变得更简单、更短。@Shilly你这么说很有趣,因为我之前的文章讨论了这一点,并决定实际使用对象:前10或20个对象键的JSON.stringify()示例就足够了。不需要发布所有2k+。这似乎是对的,但因为它在一个循环中,我必须将项目添加到同一个数组中(附加到“step1”和“step2”)。你能在评论中也提到这个问题吗?我尝试用对象扩展操作符{…}
做了一些变化,得到了奇怪的结果。这是我最后一次尝试:newObj[that.catToApp[that.dataResult[dataRow.data_id].cat_id].name]={…newObj[that.dataResult[dataRow.data_id].ts]:{[dataRow.data_id]:that.dataResult[dataRow.data_id]}
我编辑了我的答案,其中包括一个带有循环和分解结构的示例,但我不确定它是否真的有用,因为我不知道所有对象属性都是什么样子。你能提供一些样品吗?或者给一个更清晰的片段?