为了账号安全,请及时绑定邮箱和手机立即绑定

使用数组属性初始化对象

使用数组属性初始化对象

手掌心 2023-01-06 16:00:07

如何在 JavaScript 中初始化一个对象,其属性是数组?

我想要一个这种格式的对象:

foo = { prop1: [0, 1], prop2: [1, 1], prop3: [0] }

我的用例如下:

- 当一个属性不存在时,创建这个应该是一个数组的属性并添加一个数字。

- 当属性已经存在时,将数字推送到该数组;这样我就不能每次都初始化一个数组。

到目前为止我所做的是:

  var obj = {};
  arr.forEach(x => { !obj[x] && obj[x].push(1) });

我收到此错误:

未捕获的类型错误:无法读取未定义的属性“推送”

这是有道理的,因为该属性尚未初始化为空数组。


查看完整描述

2 回答

?
慕森卡

TA贡献1556条经验 获得超8个赞

Ciao 你可以试试这个:


let obj = {};

let arr = ["prop1","prop2","prop1","prop3"];

arr.forEach((x) => {

   if(obj.hasOwnProperty(x)) obj[x].push(1);

   else {

      obj[x] = [];

      obj[x].push(1);

   } 

})

console.log(obj);


如果 obj 已经有属性 x ( hasOwnProperty) push value 1 else init x as array property and push 1.


查看完整回答
反对 回复 2023-01-06
?
一只斗牛犬

TA贡献1553条经验 获得超2个赞

添加此代码段:

arr.forEach((x) => {obj[x] = (obj[x] || []).concat(1);})

如果obj[x]undefined,那么它还没有被初始化。因此,undefined || []解析为[],一个空数组,可以将1或您想要的任何数据连接到该数组。


查看完整回答
反对 回复 2023-01-06
  • 2 回答
  • 0 关注
  • 14 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信