【问题标题】:Group/merge array values based on a set number range根据设定的数字范围对数组值进行分组/合并
【发布时间】:2020-12-11 20:33:51
【问题描述】:

这里是Js新手。

我有以下数组:

Array [
  Array [
    "Canadian",
    "57",
  ],
  Array [
    "",
    "Tire",
    "64",
  ],
  Array [
    "",
    "#",
    "67",
  ],
  Array [
    "",
    "168",
    "68",
  ],
  Array [
    "",
    "65",
    "84",
  ],
  Array [
    "",
    "Pinebush",
    "84",
  ],
  Array [
    "",
    "Road",
    "86",
  ],
  Array [
    "",
    ",",
    "87",
  ],
  Array [
    "",
    "Cambridge",
    "88",
  ],
  Array [
    "",
    "ON",
    "90",
  ],
  Array [
    "",
    "Bruno",
    "108",
  ],
  Array [
    "",
    "R",
    "109",
  ],
  Array [
    "",
    ",",
    "109",
  ],
  Array [
    "",
    "General",
    "109",
  ],
  Array [
    "",
    "Manager",
    "110",
  ],
]

我想把它变成以下数组:

Array [
  Array [
    "Canadian Tire # 168",
    "57 64 67 68",
  ],
  Array [
    "65 Pinebush Road , Cambridge ON",
    "84 86 87 88 90",
  ],
  Array [
    "Bruno R , General Manager",
    "108 109 109 109 110",
  ],
]

嵌套数组中的值从字符串变为数字、标点符号和空格。 但是数组中的最后一个值是每个单词位置的 y 坐标,即:

"Canadian", <---word
"57", <----its y-coordinate


"",<--- empty string
"Tire",<---another word
"64",<---another y-coordiante

目标是根据它们的 y 坐标对单词进行分组:

57 64 67 68 都在 11 以内,

84 86 87 88 90 都在 6 或之差以内

108 109 109 109 110 都在 2 以内。

如何在 vanilla js 中实现这一点?

非常感谢!

【问题讨论】:

  • 这是一个错字:Array [ "Canadian", "57", ]?你在这里有任何""作为第一个元素,就像在其他数组中一样。
  • 我建议您先尝试自己解决它。即使你不太了解 JS,你也可以编写伪代码。
  • @Saschano 不,第一个没有任何空引号。

标签: javascript arrays sorting slice reduce


【解决方案1】:

这个怎么样:

var originalArray=[["Canadian","57"],["","Tire","64"],["","#","67"],["","168","68"],["","65","84"],["","Pinebush","84"],["","Road","86"],["",",","87"],["","Cambridge","88"],["","ON","90"],["","Bruno","108"],["","R","109"],["",",","109"],["","General","109"],["","Manager","110"]];

var newArray=[];

for(var item of originalArray) {
  var age=Number(item[item.length-1]);
  var group=age<80?0:age<100?1:2;
  if(newArray[group]==undefined) newArray[group]=[[],[]];
  for(var j=0; j<item.length-1; j++) if(item[j]!="") newArray[group][0].push(item[j]);
  newArray[group][1].push(item[item.length-1]);
}

for(var item of newArray) {
  item[0]=item[0].join(" ");
  item[1]=item[1].join(" ");
}

for(var item of newArray) console.log(item);

假设最后一个子项是您要分组的年龄。
我手动按 80 人以下分组,然后按 100 人以下分组,然后 - 其余人分组。您可以修改它(您没有指定如何查找组...)。
它将值添加到子数组中,然后加入字符串。

【讨论】:

  • 谢谢,这很好用。但是要回答您的问题,我不知道如何确切地知道组,即您选择了 80 和 100,但是数组值会动态变化,我无法按特定年龄手动分组。我正在考虑查看子值(年龄)并将那些在不知道实际值的情况下相差 12 点以内的值(如果这有意义的话)分组。
  • 您需要想出一种按年龄划分的方法 - 要么按某个年龄,要么分成 3 组,或者 - 我不知道...这取决于您需要什么...
  • 我才意识到:是那些年龄还是别的什么?!?
  • 它实际上是对应单词的 y 坐标。
  • 这就是问题所在,没有设定组数或特定数量。
猜你喜欢
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 2022-01-19
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
相关资源
最近更新 更多