Javascript 将数组拆分为匹配值的数组
我有一个值数组,类似于:Javascript 将数组拆分为匹配值的数组,javascript,arrays,Javascript,Arrays,我有一个值数组,类似于: ["100", "330", "22", "100", "4.7", "0.01", "0.01", "330", "0.01", "100", "47", "22", "100", "0.01"] 使用JavaScript,我希望将此数组拆分为多个数组,这些数组中只有匹配的字符串,如下所示: ["100", "100", "100"] ["330", "330"] ["22", "22"] ["0.01", "0.01", "0.01", "0.01"] ["47"
["100", "330", "22", "100", "4.7", "0.01", "0.01", "330", "0.01", "100", "47", "22", "100", "0.01"]
使用JavaScript,我希望将此数组拆分为多个数组,这些数组中只有匹配的字符串,如下所示:
["100", "100", "100"]
["330", "330"]
["22", "22"]
["0.01", "0.01", "0.01", "0.01"]
["47"]
["4.7"]
在此方面的任何帮助都将不胜感激!谢谢 下面是一个您想要使用的示例
const data=[“100”、“330”、“22”、“100”、“4.7”、“0.01”、“0.01”、“330”、“0.01”、“100”、“47”、“22”、“100”、“0.01”];
const unique=新集合(数据);
for(让num of unique){
log(data.filter(d=>d==num));
}
您可以使用a进行收集,并获得结果值
由内而外:
- 与
,并将数据一起使用
实例用作映射
初始值
- 作为回调,获取并收集每个组的值
其他方法:
- 用于将iterable的所有项与
- 用于具有展开的默认值
- 从映射中获取值,并将其用作
- 。这将生成一个包含所有值的数组
var数据=[“100”、“330”、“22”、“100”、“4.7”、“0.01”、“0.01”、“330”、“0.01”、“100”、“47”、“22”、“100”、“0.01”],
结果=数组。从(数据)
.reduce((m,v)=>m.set(v,[…(m.get(v)| |[]),v]),新映射)
.values()
);
控制台日志(结果)代码>
。作为控制台包装{max height:100%!important;top:0;}
使用reduce
方法和对象。值
//Go thru each value in `arr` array and convert into object with
//keys as unique (value in array) and values array of value repetitions.
{
"100": ["100", "100"],
"22": ["22"],
...
...
}
//Use the Object.values to get the Values as array of arrays
const arr=[“100”、“330”、“22”、“100”、“4.7”、“0.01”、“0.01”,
"330", "0.01", "100", "47", "22", "100","0.01"];
const updated=Object.values(
arr.reduce(
(会计科目,当前)=>(
(acc[curr]=acc中的curr?[…acc[curr],curr]:[curr]),acc
),
{}
)
);
控制台日志(更新)代码>下面是使用reduce
按值分组的另一种方法
它简化为一个对象,然后转换为一个数组
let valueArray=[“100”、“330”、“22”、“100”、“4.7”、“0.01”、“0.01”、“330”、“0.01”、“100”、“47”、“22”、“100”、“0.01”];
让groupedByValue=Object.values(valueArray
.减少((acc,x)=>{
设arr=acc[x]| |[];
arr.push(x);
acc[x]=arr;
返回acc;
},{}));
console.log(groupedByValue)代码>也可以这样做:
const{log}=console;
常数arr=[“100”、“330”、“22”、“100”、“4.7”、“0.01”、“0.01”、“330”、“0.01”、“100”、“47”、“22”、“100”、“0.01”];
log([…新集合(arr)].map(x=>arr.filter(y=>y==x));
到目前为止您尝试了什么?我还没有尝试过任何东西,我对JavaScript还比较陌生,不知道从哪里开始这部分内容似乎无效:“0.01”、“330”、“0.01”
分散累加器是一种不好的做法。请考虑返回累加器。@ Siva,你能给我解释一下代码,这样我能更好地理解它吗?我喜欢理解我正在使用的代码!当然@Alex我将很快添加详细信息。@Alex Morrison用评论更新了答案。希望这能有所帮助。@SivaKondapiVenkata你让事情变得比你想象的复杂得多,我喜欢这个解决方案!您是否可以为我添加一些注释,以帮助我理解和学习我正在使用的代码:)