如何以自定义模式对数组进行切片
How to slice an array in a custom pattern?
我有这个数组:
var x = [1,2,3,4,5,"a","b","c",9,10];
我想将此数组切成以下模式:
var x = [[1,2,3],[2,3,4],[3,4,5],[4,5,"a"],[5,"a","b"],["a","b","c"],["b","c",9],["c",9,10]];
我使用以下代码并能够获得[[1,2,3],[4,5,"a"],["b","c",9],[10,11,12]]
.但它对我不起作用。我需要得到上面的模式。
var stream = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
var x = ["a", "b", "c"];
var ad_time = 6;
var result = [];
var ad_index = stream.indexOf(ad_time);
if (~ad_index) {
for (var i = 0; i < x.length; i++) {
stream[ad_index + i] = x[i];
}
}
while (stream.length > 0) {
var chunk = stream.splice(0, 3);
result.push(chunk);
}
console.log(JSON.stringify(result));
谢谢你!
这段代码应该这样做:
var x = [1,2,3,4,5,"a","b","c",9,10];
var new_array = [];
for (var i = 0; i < x.length - 2; i++) {
new_array.push(x.slice(i, i + 3));
}
您可以通过一个简单的for
循环来实现它:
var x = [1,2,3,4,5,"a","b","c",9,10];
var result = [];
for (var i = 0, il = x.length - 2; i < il; i++) {
result.push([x[i], x[i + 1], x[i + 2]]);
}
console.log(result);
编辑:Array.slice()
更优雅,但它要慢得多。根据此测试,在 Chrome 上,它慢了 80% - 85%。如果您不需要担心性能,请选择您喜欢的任何一种。例如,如果您需要从数组中切片 8 个元素,那么使用 x.slice(i + 8)
比 [x[i], x[i + 1], x[i + 2], x[i + 3], ...]
更容易写入和读取。但是,如果性能很重要,那么直接访问可能是更好的选择。
相关文章:
- 对不同的数组进行切片并返回选定的值
- 如何在jquery中对php/ajax传递的数组进行切片
- Ramda.js - 切片数组的内部值
- JavaScript 中的最大公共数组切片
- 切片和拼接不适用于数组值
- 我如何在数组中存储值 从切片获取
- 如何从对象文本数组中切片数组
- 无法通过在节点.js中切片来修改数组
- 使用对象对数组进行切片,并获取包含对象副本的数组
- 未引用的数组在“切片”之后不那么未引用
- JavaScript 数组切片与删除
- 如何在数组中轻松添加“.”,可以使用切片
- 用键数组对JSON对象数组进行切片
- handlers.js模板,带有用于切片数据数组的自定义助手
- 复制带切片的数组时出现异常行为
- 从数组(切片)中提取x个项目,但如果到达末尾,则从头开始继续
- 数组.切片不起作用,它只是原样复制数组,而不是减去一些值
- 多维数组切片多个HTML表和导航d3.js
- 排序javascript数组切片
- 为什么数组切片将javascript参数转换为数组