使用整数数组从位置javascript获取数组的值

时间:2015-05-03 19:43:06

标签: javascript html arrays

我有两个数组,一个是多维数组,另一个是整数数组,存储前者的位置以进行读取和编辑。我可以使用单独的变量阅读,但我不知道如何编辑。例如:

var loc = [ 2, 4];
var groups = [
      ["Samantha", "Janice", "Lisa", "Wendell", "Laura"],
      ["Rachel", "John", "Smithy"],
      ["Mandy", "Randy", "Jamal", "Erica"]
];

在这个例子中,我如何在loc变量中存储的位置编辑组中的值:

groups[2][4]

还要记住,小组不一定是2维。

3 个答案:

答案 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;的数组数组,所以我们只需要重新绑定数组数据,直到那里为止。只剩下一个级别,这是我们要找到要更新的值的地方。