如果a = [[1,[],“ f”,3],[3,[4,“ x”]]]]和b = [1,1].
我想像a [1] [1]一样读取a by b,以获得[4,“ x”].请注意,b是一个只能由整数组成的数组.
您也可以执行eval(‘a [‘b.join(‘],[‘)’]’),但需要实际的变量名作为字符串,这很丑陋.
这是我的一些功能:
Array.prototype.readByArray = function(a) {
var c = this;
for (var i = 0; i < a.length; i++) {
c = c[a[i]];
}
return c;
};
Array.prototype.emptyByArray = function(a) {
var c = this.readByArray(a);
c.splice(0, c.length);
};
Array.prototype.concateByArray = function(a, e) {
var c = this.readByArray(a);
for (var i = 0; i < e.length; i++) {
c.push(e[i]);
}
};
Array.prototype.setByArray = function(a, e) {
this.emptyByArray(a);
this.readByArray(a).push(e);
};
在此示例中,这对于以命令式读取嵌套数组很有用:
Array.prototype.readByArray=function(a){var c=this;for(var i=0;i
var a = [1,2,3,[1,2,3,[{x: 3},"test"],4],"foo","bar"]; //Your array
var b = [0]; //Reading stack
var s = '[\n'; //Output
while(b[0]
if(Array.isArray(a.readByArray(b))){
s+=' '.repeat(b.length)+'[\n';
b.push(-1);
}else{
s+=' '.repeat(b.length)+JSON.stringify(a.readByArray(b))+'\n';
}
b[b.length-1]++;
while(b[b.length-1]>=a.readByArray(b.slice(0,-1)).length){
b.pop();
b[b.length-1]++;
s+=' '.repeat(b.length)+']\n';
}
}
console.log(s);
有什么更好的方法吗?是否有本机功能?
解决方法:
从整个数组开始,并为b的每个元素返回数组的一部分,直到使用所有索引为止.
var a = [[1, [], "f", 3], [3, [4, "x"]]],
b = [1, 1],
result = b.reduce(function (v, i) {
return v[i];
}, a);
console.log(result);
ES6
var a = [[1, [], "f", 3], [3, [4, "x"]]],
b = [1, 1],
result = b.reduce((v, i) => v[i], a);
console.log(result);
result[0] = 42;
console.log(a);
result.splice(0, result.length, 'test');
console.log(a);
.as-console-wrapper { max-height: 100% !important; top: 0; }
标签:arrays,javascript
来源: https://codeday.me/bug/20191118/2026893.html