【问题标题】:JavaScript - How do I dynamically assign a new key value pair to an object, using object-literal, and bracket notation, spread syntax in a one-liner?JavaScript - 如何使用对象文字和括号表示法将新的键值对动态分配给对象,并在单行中传播语法?
【发布时间】:2021-11-13 17:04:53
【问题描述】:

我想动态指定负值,如这个确切的问题所示。

Rules for unquoted JavaScript Object Literal Keys?

我还想使用某种动态括号表示法,使用负余数(模运算)等效的字符串来完成此操作。

bucketObj[key] 报告未定义,因为我没有预先设置一个键来存储相应的值。如何在括号表示法、点表示法或两者中动态设置对象的键?

 function toDigitBuckets(array, radix) {
    let bucket = JSON.parse(JSON.stringify([...Array(radix).fill([])]));
    let bucketObj = Object.assign(bucket);
    array.forEach(val => { let key = String.toString(val % 10); bucketObj[key].push(val) });
    return bucket; 
  }
  
  let array = [-7, -49, 84, 39, -31, 95, 7, -8, -13, -32, 93, 40, -81, -30, -57, -57, 49, 66, -64, 42, 35, 29, -57, 41, 93, 34, -45, -15, 51, 16, 97, -88, 52, -69, 56, -16, -91, 51, 10, -21, 80, 78, -5, 18, -20, -98, 72, -94, 11, -83, -31, 13, -21, 39, -47, 8, -98, 95, 52, -18, 77, -11, -38, -46, -98, 48, -45, -4, 76, -32, -81, 67, -82, 9, -60, -20, 0, 33, -12, 77, 65, 45, -22, 99, -47, -83, -81, 10, -99, 16, 23, 5, -57, 89, -62, 9, -16, 79, 5, -2];
  
  let radix = 10;
  console.log(JSON.stringify(toDigitBuckets(array, radix)));

【问题讨论】:

  • 我希望我没有无意中暗示我的问题的答案,但我怀疑我的大脑给了我可能有帮助的线索。答案仍然有助于投票考虑。
  • 请添加想要的结果。
  • 类似array.forEach(val => { key = String.toString(val % 10); {...<spread existing pairs>,[key]:val }});
  • 请建议我的 是否只是对象标签,如果是这样,那真的很酷
  • 我不知道。请用文字符号添加结果。

标签: javascript arrays object dynamic key


【解决方案1】:

您可以将Array#reduce 与对象一起用作累加器。每次遇到新键时,首先将该属性值设置为空数组。

function toDigitBuckets(array, radix) {
  return array.reduce((acc, curr) => 
    ((acc[curr % radix] ??= []).push(curr), acc), {});
}
let array = [-7, -49, 84, 39, -31, 95, 7, -8, -13, -32, 93, 40, -81, -30, -57, -57, 49, 66, -64, 42, 35, 29, -57, 41, 93, 34, -45, -15, 51, 16, 97, -88, 52, -69, 56, -16, -91, 51, 10, -21, 80, 78, -5, 18, -20, -98, 72, -94, 11, -83, -31, 13, -21, 39, -47, 8, -98, 95, 52, -18, 77, -11, -38, -46, -98, 48, -45, -4, 76, -32, -81, 67, -82, 9, -60, -20, 0, 33, -12, 77, 65, 45, -22, 99, -47, -83, -81, 10, -99, 16, 23, 5, -57, 89, -62, 9, -16, 79, 5, -2];
let radix = 10;
console.log(toDigitBuckets(array, radix));
.as-console-wrapper{max-height:100%!important;top:0}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-06
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 2015-05-02
    • 2012-07-13
    • 1970-01-01
    相关资源
    最近更新 更多