重复数组在一定范围内上下移动
repeat array going up and down in with some limit
我有这种形式的数据[1,2,3,4]
。我想对这个数组执行一些操作,以便得到这样的输出 [1,2,3,4, 4,3,2,1, 1,2]
。拜托,你能给我一些实现这个输出的方法吗?
// function declaration
function arrayExm(array,limit){
// want some operations here so that i will get this output
}
//function execution
arrayExm([1,2,3,4],10)
//so it will return [1,2,3,4, 4,3,2,1, 1,2]
您可以使用简单的 for 循环来实现它。
function arrayExm(array, limit) {
var res = [],
len = array.length;
// iterate upto the limit
for (var i = 0; i < limit; i++) {
// define the value based on the iteration
res[i] = Math.floor(i / len) % 2 == 0 ? // check the array element repetition is odd or even
array[i % len] : // if even define element in same order
array[len - i % len - 1]; // if odd define element in reverse order
}
return res;
};
console.log(arrayExm([1, 2, 3, 4], 10))
试试这个,它会对你有所帮助,在这段代码中,你可以通过给定真(向前)和假(向后)来开始向前和向后方向的数组排列。即使数组包含字符串,您也可以使用此代码进行排列。
var array = [1, 2, 3, 4];
var outputArray = [];
var j = 0;
var i;
arrayRepeat(array, 10, true);
alert(outputArray);
function arrayRepeat(array, limit, direction) {
if (direction) {
for (i = 0; i < array.length, j < limit; i++, j++) {
outputArray[j] = array[i];
if (i == array.length) {
arrayRepeat(array, limit, false);
}
}
} else {
for (i = array.length - 1; i >= 0, j < limit; i--, j++) {
outputArray[j] = array[i];
if (i == -1) {
arrayRepeat(array, limit, true);
}
}
}
}
你也可以 concat() 你的数组和它的 reverse() 只要你限制参数使你能够整个数组,最后你将 slice() 数组的一部分,它将保留
var arrayReapet = (array, limit) => {
var results = [];
var divisor = parseInt(limit / array.length);
var modulo = limit % array.length;
for (var i = 0; i < divisor; i++) {
if (i === 0) results = results.concat(array);
else results = results.concat(array.reverse());
}
results = results.concat(array.reverse().slice(0, modulo));
return results
}
console.log(arrayReapet([1, 2, 3, 4], 10));
编写一个生成器来生成来回序列。然后编写另一个生成器来获取前 n 个值。
function* repeat(arr) {
const rev = arr.slice().reverse();
while (true) {
for (let x of arr) yield x; // Up...
for (let x of rev) yield x; // and down...
}
}
function* take(iterable, n) {
for (let x of iterable) if (!n--) return; else yield x;
}
console.log([...take(repeat([1,2,3,4]), 10)]);
我有这种形式的数据[1,2,3,4]
。我想对这个数组执行一些操作,以便得到这样的输出 [1,2,3,4, 4,3,2,1, 1,2]
。拜托,你能给我一些实现这个输出的方法吗?
// function declaration
function arrayExm(array,limit){
// want some operations here so that i will get this output
}
//function execution
arrayExm([1,2,3,4],10)
//so it will return [1,2,3,4, 4,3,2,1, 1,2]
您可以使用简单的 for 循环来实现它。
function arrayExm(array, limit) {
var res = [],
len = array.length;
// iterate upto the limit
for (var i = 0; i < limit; i++) {
// define the value based on the iteration
res[i] = Math.floor(i / len) % 2 == 0 ? // check the array element repetition is odd or even
array[i % len] : // if even define element in same order
array[len - i % len - 1]; // if odd define element in reverse order
}
return res;
};
console.log(arrayExm([1, 2, 3, 4], 10))
试试这个,它会对你有所帮助,在这段代码中,你可以通过给定真(向前)和假(向后)来开始向前和向后方向的数组排列。即使数组包含字符串,您也可以使用此代码进行排列。
var array = [1, 2, 3, 4];
var outputArray = [];
var j = 0;
var i;
arrayRepeat(array, 10, true);
alert(outputArray);
function arrayRepeat(array, limit, direction) {
if (direction) {
for (i = 0; i < array.length, j < limit; i++, j++) {
outputArray[j] = array[i];
if (i == array.length) {
arrayRepeat(array, limit, false);
}
}
} else {
for (i = array.length - 1; i >= 0, j < limit; i--, j++) {
outputArray[j] = array[i];
if (i == -1) {
arrayRepeat(array, limit, true);
}
}
}
}
你也可以 concat() 你的数组和它的 reverse() 只要你限制参数使你能够整个数组,最后你将 slice() 数组的一部分,它将保留
var arrayReapet = (array, limit) => {
var results = [];
var divisor = parseInt(limit / array.length);
var modulo = limit % array.length;
for (var i = 0; i < divisor; i++) {
if (i === 0) results = results.concat(array);
else results = results.concat(array.reverse());
}
results = results.concat(array.reverse().slice(0, modulo));
return results
}
console.log(arrayReapet([1, 2, 3, 4], 10));
编写一个生成器来生成来回序列。然后编写另一个生成器来获取前 n 个值。
function* repeat(arr) {
const rev = arr.slice().reverse();
while (true) {
for (let x of arr) yield x; // Up...
for (let x of rev) yield x; // and down...
}
}
function* take(iterable, n) {
for (let x of iterable) if (!n--) return; else yield x;
}
console.log([...take(repeat([1,2,3,4]), 10)]);