根据设置的数字范围对数组值进行分组/合并

问题描述

这里是新手。

我有以下数组:

Array [
  Array [
    "Canadian","57",],Array [
    "","Tire","64","#","67","168","68","65","84","Pinebush","Road","86",","87","Cambridge","88","ON","90","Bruno","108","R","109","General","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之内。

如何在普通js中实现这一目标?

非常有义务!

解决方法

如何?

var originalArray=[["Canadian","57"],["","Tire","64"],"#","67"],"168","68"],"65","84"],"Pinebush","Road","86"],","87"],"Cambridge","88"],"ON","90"],"Bruno","108"],"R","109"],"General","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岁以下的孩子以及其余的人进行了分组。您可以修改它(您未指定如何查找组...)。
它将值添加到子数组中,然后再连接到字符串。