如果a=[[1,[],"f",3],[3,[4,"x"]]]
和b=[1,1]
。用Javascript中的數組讀取數組?
我想讀a
通過b
像a[1][1]
得到[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<a.length;i++){c=c[a[i]];}return c;};
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]<a.length){
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);
有沒有更好的方式來做到這一點?這是否有本地功能?
普羅蒂普:不要改變'Array'的原型。它會讓你頭痛得多而不是有用。 –
@Derek朕會功夫舉幾個例子。 –
[*爲什麼要擴展原生對象是一個不好的做法?](https://stackoverflow.com/questions/14034180/why-is-extending-native-objects-a-bad-practice)過去十年來,許多圖書館都有試圖修改內建對象的原型,並且都失敗了。總的原則是,你只改變你自己的東西,留下你自己沒有的東西。 –