如何解决合并数组JavaScript中的每3个元素
我是编程的新手,将不胜感激。
假设我有以下数组。 (请注意,此数组包含6个元素)
var data =
[
'he','l','lo','th','e','re',]
我在这里的目标是创建一个将每三个元素连接为一个元素的新数组。
当前,对于这个问题,我的新手方法是使用简单的for循环,获取每个元素,并将元素+1的索引和元素+ 2的索引添加到初始元素。
该代码似乎可以部分工作,但是由于它遍历每个元素而不是每3个元素,因此将元素连接太多次。
这是我的代码:
var data =
[
'he',]
var newdata = []
for (var i = 0; i < data.length; i++) {
var three = data[i] + data[i+1] + data[i+2]
newdata.push(three)
}
console.log(newdata) // => This will output 'hello','lloth' 'lothe' 'there' 'ereundefined' 'reundefinedundefined'
所需的输出是这样
var data =
[
'hello','there',]
要使此现有代码正常工作,我假设我必须删除元素+元素+1和元素+ 2,以便它不会不必要地正确地连接事物,但是我没有成功。
我愿意接受获得相同输出的其他解决方案/替代方案。
我们非常感谢您的帮助。
解决方法
var data =
[
'he','l','lo','th','e','re',]
var newdata = []
for (var i = 0; i < data.length; i+=3) { // i+=3 can solve your problem
var three = data[i] + data[i+1] + data[i+2]
newdata.push(three)
}
console.log(newdata)
,
将代码更改为
var data =
[
'he',]
var newdata = []
while (data.length){
newdata.push(data.splice(0,3).join(''))
}
console.log(newdata)
,
您还可以对任务使用reduce方法:
const output = ["he","l","lo","th","e","re"].reduce((acc,next,index) => {
if (index % 3 === 0) { // if index is 0,3,6,9,...
acc.push(next);
} else { // if not,append to the last element
acc[acc.length - 1] = acc[acc.length - 1] + next;
}
return acc;
},[]);
console.log(output)
返回
(2) ["hello","there"]
,
.slice()方法在这里确实很有用,因为它使原始数组保持不变,并根据提供给它的索引创建一个新数组。然后,我们仅需对3个数组进行迭代,方法是每次将“ i”加3,然后将每个切片添加到数组中以将它们全部组合在一起。
const joinEveryThree = () => {
let data = ["he","re"];
let newData = [];
for (let i = 0; i < data.length; i += 3) {
let chunk = data.slice(i,i+3);
newData.push(chunk.join(''))
}
return newData.join(' ')
};
,
您已经非常接近解决方案。如果您不想编辑原始数组,那么您要做的就是将索引增加3而不是1,并修改条件,以便如果数组的长度不是3的乘积,则不要出现错误:
for (var i = 0; i + 2 < data.length; i += 3) {
newData.push(data[i] + data[i + 1] + data[i + 2]);
}
如果数组末尾有一个或两个额外的项目,则会忽略它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。