Group/merge 基于设定数字范围的数组值
Group/merge array values based on a set number range
这里是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 中实现这一点?
感激不尽!
这个怎么样:
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);
假设最后 sub-item 是您要分组的年龄。
我按 80 岁以下手动分组,然后按 100 岁以下分组,然后 - 按其余分组。您可以修改它(您没有指定如何查找组...)。
它将值添加到 sub-arrays 中,然后加入到字符串中。
这里是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 中实现这一点?
感激不尽!
这个怎么样:
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);
假设最后 sub-item 是您要分组的年龄。
我按 80 岁以下手动分组,然后按 100 岁以下分组,然后 - 按其余分组。您可以修改它(您没有指定如何查找组...)。
它将值添加到 sub-arrays 中,然后加入到字符串中。