我有一个数组数组,如:
[
[1,2,3],
[1,2,3],
[1,2,3],
]
Run Code Online (Sandbox Code Playgroud)
我想转置它以获得以下数组:
[
[1,1,1],
[2,2,2],
[3,3,3],
]
Run Code Online (Sandbox Code Playgroud)
使用循环以编程方式执行此操作并不困难:
function transposeArray(array, arrayLength){
var newArray = [];
for(var i = 0; i < array.length; i++){
newArray.push([]);
};
for(var i = 0; i < array.length; i++){
for(var j = 0; j < arrayLength; j++){
newArray[j].push(array[i][j]);
};
};
return newArray;
}
Run Code Online (Sandbox Code Playgroud)
然而,这看起来很笨重,我觉得应该有一种更简单的方法.在那儿?
我有2个数组:
var a = [1, 2, 3]
var b = [a, b, c]
Run Code Online (Sandbox Code Playgroud)
我想得到的结果是:
[[1, a], [2, b], [3, c]]
Run Code Online (Sandbox Code Playgroud)
这看起来很简单,但我无法弄清楚.
我希望结果是一个数组,两个数组中的每个元素都压缩在一起.
我想将一个数字数组的每个值与不同数字数组中的相应值相加,我想这样做而不循环遍历每个单独的值.
所以:
var array1 = [1,2,3,4];
var array2 = [5,6,7,8];
var sum = [6,8,10,12];
Run Code Online (Sandbox Code Playgroud)
但是,我喜欢一下子做到这一点,而不是这样做:
for(var i = 0; i < array1.length; i++){
sum.push(array1[i] + array2[i]);
}
Run Code Online (Sandbox Code Playgroud)
谁能想到办法?我很难过.
我想构建一个for同时遍历两个变量的循环。n是一个数组,j从 0 到 16。
var n = [1,2,3,5,7,8,9,11,12,13,14,16,17,18,20,21,22];
var m = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
m.forEach(k => {
n.forEach(i => {
console.log(i, k)
});
};
Run Code Online (Sandbox Code Playgroud)
最终结果应该输出:
1,0
2,1
3,2
5,3
(...)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个循环由于某种原因没有这样做,因为它每个数字重复 17 次。
我在这里缺少什么?
JavaScript 6中是否有允许映射多个数组的功能?
像拉链一样的东西:
var myFn = function (a, b) { console.log(a, b);}
var arr1 = ['a', 'b', 'c'];
var arr2 = [1, 2, 3];
arr1.map(myFn, arr2); // imaginary syntax.
// prints :
// a 1
// b 2
// c 3
Run Code Online (Sandbox Code Playgroud) 我基本上想要使用_.each()或_.map()在Underscore.js中表达以下行为.
a = [1, 2, 3]
b = [3, 2, 1]
# Result list
c = [0, 0, 0]
for i in [0 .. a.length - 1]
c[i] = a[i] + b[i]
Run Code Online (Sandbox Code Playgroud)
这在Matlab(我的主要语言)中绝对是可能的:
c = arrayfun(@(x,y) x+y, a, b)
Run Code Online (Sandbox Code Playgroud)
直觉上,感觉Underscore中的语法应该是:
c = _.map(a, b, function(x, y){ return x + y;})
Run Code Online (Sandbox Code Playgroud)
但是,该参数列表是不可接受的; 第二个参数应该是一个可调用的函数.
在这种情况下,可选的"上下文"参数对我没有帮助.
说我有一个数组[["a", "b"], ["c", "d"]],我如何迭代或减少或映射或加入这个数组并得到["ac", "ad", "bc", "bd"],如果数组像[["a", "b"], ["c", "d"], ["e", "f"]]我应该得到的一样["ace", "acf", "ade", "adf", "bce", "bcf", "bde", "bdf"]
我们如何使用数组迭代或方法来实现这一点?
我尝试使用reduce:
const output = [];
const sol = array.reduce((cum, ind) => {
for (let i = 0; i <= cum.length; i++ ) {
for (let j = 0; j <= ind.length; j++) {
output.push(`${cum[i]} + ${ind[j]}`);
}
}
});
console.log(output);
Run Code Online (Sandbox Code Playgroud)
但我没有得到确切的输出。
我正在尝试扩展Array原型:
Array.prototype.rotate = function() {
var arr = [];
for (var i = 0; i < this[0].length; ++i) {
arr[i] = [];
for (var j = 0; j < this.length; ++j) {
arr[i].push(this[j][i])
}
}
this = arr;
return arr;
}
Run Code Online (Sandbox Code Playgroud)
完全花花公子,直到this = arr.那爆炸了.
如何重新分配this原型功能的属性?我希望地狱能够处理以前的阵列配置.
我为什么这样做?我希望它的行为与其他数组函数一样.例如,这有效:
myArray.pop();
Run Code Online (Sandbox Code Playgroud)
我不需要这样做:
myArray = myArray.pop();
Run Code Online (Sandbox Code Playgroud)
我这样做是为了解决它,但它似乎很愚蠢:
Array.prototype.rotate = function()
{
var arr = [];
var len = this[0].length;
for (var i = 0; i < len; ++i) { …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的二维数组:
let test2d = [
["foo", "bar"],
["baz", "biz"]
]
Run Code Online (Sandbox Code Playgroud)
如果我想将这个2D数组转换为1D数组(不交替它们的值),我可以通过两种方式实现:
第一种方式:
let merged = test2d.reduce( (prev, next) => prev.concat(next) )
console.log(merged) // ["foo", "bar", "baz", "biz"]
Run Code Online (Sandbox Code Playgroud)
第二种方式:
let arr1d = [].concat.apply([], test2d)
console.log(arr1d) // ["foo", "bar", "baz", "biz"]
Run Code Online (Sandbox Code Playgroud)
问题:如何获得一维数组但其值交替出现?我的意思是这样的:
["foo", "baz", "bar", "biz"]
Run Code Online (Sandbox Code Playgroud) javascript ×9
arrays ×6
loops ×2
ecmascript-6 ×1
for-loop ×1
foreach ×1
matrix ×1
object ×1
transpose ×1
typescript ×1
vue.js ×1