【问题标题】:Matches same value decimal numbers to push in to an array匹配相同值的十进制数以推入数组
【发布时间】:2018-02-11 09:20:42
【问题描述】:

我在数组中有一个 Srings

var QNo = ["1.1","1.2","1.3","2.1","2.2","3.1","3.2","3.3","4.1","4.2"];

需要更改对象数组中的 QNo 与这样的匹配小数

var result = [["1.1","1.2","1.3"],["2.1","2.2"],["3.1","3.2","3.3"],["4.1","4.2"]];

我尝试过这种代码

for (var j = 0; j < QNo.length ; j++) {
     if ( QNo[j].match(/.*(?=\.)/g) ) {
      result.push(QNo[j]);
     }
}

比赛结束后,我不知道将小数值作为对象推送

【问题讨论】:

  • 好的,到目前为止你尝试了什么?
  • 我试过 match(/.*(?=\.)/g) 来找到小数点,然后我就卡住了。
  • 添加您编写的代码,而不仅仅是正则表达式。您是否编写了任何类型的循环来遍历所有值?
  • bzw,你的结果无效。

标签: javascript arrays arraylist


【解决方案1】:

您可以取出拆分值的左侧部分并检查最后一个值是否在同一组中 - 然后将值推送到该组。如果没有,则建立一个新组。

var qNo = ["1.1", "1.2", "1.3", "2.1", "2.2", "3.1", "3.2", "3.3", "4.1", "4.2"],
    result = qNo.reduce(function (r, a, i, aa) {
        function left(a) { return (a || '').split('.')[0]; }
        if (left(a) === left(aa[i - 1])) {
            r[r.length - 1].push(a);
        } else {
            r.push([a]);
        }
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

对于未排序的值,您可以使用哈希表并稍后对结果进行排序。

var qNo = ["1.1", "3.1", "1.2", "1.3", "2.1", "3.2", "3.3", "4.1", "2.2", "4.2"],
    hash = Object.create(null),
    result = qNo.reduce(function (r, a, i, aa) {
        function left(a) { return (a || '').split('.')[0]; }
        var key = left(a);
        if (!hash[key]) {
            hash[key] = [];
            r.push(hash[key]);
        }
        hash[key].push(a);
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 请注意,该解决方案仅在对字符串进行排序时才有效……否则将无效。我知道这不是问题(并且原始输入已排序)但我不确定依赖它是否是一个好习惯:)
【解决方案2】:

您可以使用 reduce 遍历数组中的所有项目,并使用 object 按它们的 int 值对它们进行分组,其中每个项目将进入该对象中的相关 key(密钥基于int 值):

var QNo = ["1.1","1.2","1.3","2.1","2.2","3.1","3.2","3.3","4.1","4.2"];
var reduced = QNo.reduce((res, item) => {
  if (res.hasOwnProperty(parseInt(item))) {
    res[parseInt(item)].push(item)
  } else {
    res[parseInt(item)] = [item]
  }
  return res;
}, {});
console.log(reduced);
console.log(Object.values(reduced));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2016-02-01
    • 2022-11-25
    相关资源
    最近更新 更多