我有两个数组,一个是多维数组,另一个是整数数组,存储前者的位置以进行读取和编辑。我可以使用单独的变量阅读,但我不知道如何编辑。例如:
var loc = [ 2, 4];
var groups = [
["Samantha", "Janice", "Lisa", "Wendell", "Laura"],
["Rachel", "John", "Smithy"],
["Mandy", "Randy", "Jamal", "Erica"]
];
在这个例子中,我如何在loc变量中存储的位置编辑组中的值:
groups[2][4]
还要记住,小组不一定是2维。
答案 0 :(得分:1)
function edit (toBeEdited, indexes, value) {
var array = toBeEdited,
len = indexes.length - 1,
i = 0,
idx = null;
for ( ; i < len; i += 1 ) {
idx = indexes[i];
if ( idx in array ) {
array = array[idx];
} else {
throw new Error("index out of bounds");
}
}
idx = indexes[len];
if ( idx in array ) {
array[idx] = value;
} else {
throw new Error("index out of bounds");
}
}
var loc = [ 2, 3 ];
var groups = [
["Samantha", "Janice", "Lisa", "Wendell", "Laura"],
["Rachel", "John", "Smithy"],
["Mandy", "Randy", "Jamal", "Erica"]
];
edit(groups, loc, "Anna"); // will replace "Erica" with "Anna"
答案 1 :(得分:0)
谢谢,这就是我想到的:
var edit = function(toBeEdited, indexes, value){
var gL=value;
var tgL;
for (var x=0; x < indexes.length; x++){
var n=indexes.length-1-x;
tgL=toBeEdited;
for (var y=0; y < n; y++){
tgL=tgL[indexes[y]];
}
tgL[indexes[n]]=gL;
gL=tgL;
}
return tgL;
};
答案 2 :(得分:0)
只需进入嵌套数组,直到达到所需的深度:
function update(data, pos, newValue) {
pos = pos.slice();
while(pos.length > 1) {
data = data[pos[0]];
pos.splice(0,1);
}
data[pos[0]] = newValue;
}
现在我们可以运行
了var loc = [ 2, 3 ];
var groups = [
["Samantha", "Janice", "Lisa", "Wendell", "Laura"],
["Rachel", "John", "Smithy"],
["Mandy", "Randy", "Jamal", "Erica"]
];
update(groups, loc, "jehosephat");
然后,如果我们控制日志groups[2][3]
中的内容,我们会看到更新后的值。这个实现的想法是&#34;我们有一个更深和更深的位置列表,以及一个带数据&#34;的数组数组,所以我们只需要重新绑定数组数据,直到那里为止。只剩下一个级别,这是我们要找到要更新的值的地方。