【问题标题】:Modifying strings in an array of strings with duplicate keys with Javascript使用Javascript修改具有重复键的字符串数组中的字符串
【发布时间】:2021-01-29 17:47:13
【问题描述】:

在最后一步中,我被困在 codewars kata 上,我需要修改数组的字符串并对重复键的值求和。 res=[ '(A : 200)', '(B : 250)', '(B : 890)' ]应该修改成res=[ '(A : 200)', '(B : 1140)']

我想出了如何选择要与res.forEach((x, i) => { x.slice(5, -1)}) 求和的字符串部分,但我完全不知道如何写出并检查x[1] 是否出现多次以及如何创建一个新数组通过其Number(string slice) 的总和重新分配该特定元素。

请帮忙!

【问题讨论】:

    标签: javascript arrays string


    【解决方案1】:

    您必须将这些字符串分解为它们的组件(键/值)。然后创建一个以键为键的对象,初始值为 0 作为对应值。然后迭代数据以将值添加到适当的键,最后将结果格式化回原始格式。

    当然,如果您生成这些字符串,那么最好先应用此逻辑,然后再格式化结果。

    let res = ['(A : 200)', '(B : 250)', '(B : 890)'];
    let pairs = res.map(s => s.match(/\w+/g)); // extract the relevant info
    let obj = Object.fromEntries(pairs.map(([k]) => [k, 0])); // start with 0
    for (let [k, v] of pairs) obj[k] += +v; // add all values
    let result = Object.entries(obj).map(([k, v]) => `(${k} : ${v})`); // format
    
    console.log(result);

    如果你不支持Object.fromEntries,那么你可以使用Object.assign

    let res = ['(A : 200)', '(B : 250)', '(B : 890)'];
    let pairs = res.map(s => s.match(/\w+/g)); // extract the relevant info
    let obj = Object.assign(...pairs.map(([k]) => ({ [k]: 0 }))); // start with 0
    for (let [k, v] of pairs) obj[k] += +v; // add all values
    let result = Object.entries(obj).map(([k, v]) => `(${k} : ${v})`); // format
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-07
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 2018-08-04
      • 2022-01-09
      • 1970-01-01
      相关资源
      最近更新 更多