亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JS reduce: TypeError: Cannot create property at

JS reduce: TypeError: Cannot create property at

慕仙森 2022-10-13 10:39:32
我有以下內容:let keys = ['a','b','c'];let vals = ['1','b','h'];const my_obj = keys.reduce(function(acc,key,i) {return acc[key]=vals[i];},{});logger.log(my_obj);我想my_obj成為{a:1,b:b,c:h}。我越來越:TypeError: Cannot create property 'b' on string '1'at Array.reduce我究竟做錯了什么?
查看完整描述

3 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

如果你想使用 reduce 方法,那很好,但你必須返回累加器才能使其工作。


let keys = ['a', 'b', 'c'];

let vals = ['1', 'b', 'h'];

const my_obj = keys.reduce(function(acc, key, i) {

  acc[key] = vals[i];

  return acc;

}, {});


console.log(my_obj);


但我會建議使用簡單的 for 循環,因為問題很簡單


let keys = ['a', 'b', 'c'];

let vals = ['1', 'b', 'h'];

let my_obj = {};

for (let i = 0; i < keys.length; i++)

  my_obj[keys[i]] = vals[i];


console.log(my_obj);


查看完整回答
反對 回復 2022-10-13
?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

您需要將對象作為 acc 返回。在您的代碼中,您將返回分配的值


let keys = ['a', 'b', 'c'];

let vals = ['1', 'b', 'h'];

const my_obj = keys.reduce(function(acc, key, i) {

  acc[key] = vals[i];

  return acc;

}, {});


console.log(my_obj);


查看完整回答
反對 回復 2022-10-13
?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

return acc[key]=vals[i];實際上返回vals[i]==> 的值,您最終h只能在https://playcode.io/環境中獲得。

更新:在您的環境中,您收到該錯誤是因為:

  • keys.reduce在你的下一個第一次運行之后acc"1"返回acc[key]= vals[0]} 相等的返回vals[0]"1"

  • 現在你來到第二輪keys.reduce,你的 acc 就是"1"你設置 的acc[key]= vals[1]}equal "1"[b] = vals[1] ==> 你得到了那個錯誤

嘗試這個:

let keys = ['a','b','c'];

let vals = ['1','b','h'];


const my_obj = keys.reduce(function(acc,key,i) {

// return new expanded acc

return ({...acc, [key]: vals[i]})

},{});


console.log(my_obj);


查看完整回答
反對 回復 2022-10-13
  • 3 回答
  • 0 關注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號