在Javascript中查找多维数组的索引

在Javascript中查找多维数组的索引,javascript,Javascript,我已经用JavaScript创建了一个多维数组,我想找到特定值的确切索引。该值将由用户输入 var array=[]; for(var i=0;i<10;i++) { array[i] = []; for(var j=0;j<100;j++) { k = k +1 array[i].push(k); } } var index=array.indexOf(**"What to insert here???"**); v

我已经用JavaScript创建了一个多维数组,我想找到特定值的确切索引。该值将由用户输入

var array=[];
for(var i=0;i<10;i++)
{
    array[i] = [];
    for(var j=0;j<100;j++)
    {
        k = k +1
        array[i].push(k);
    }
}
var index=array.indexOf(**"What to insert here???"**);
var数组=[];
对于(var i=0;i

/**
*多维数组索引
*@param arr{!Array}-输入数组
*@param k{object}-要搜索的值
*@return{Array}
*/
函数getIndexOfK(arr,k){
对于(变量i=0;i-1){
返回[i,索引];
}
}
}
//生成样本数据
var k=0;
var数组=[];
对于(变量i=0;i<10;i++){
数组[i]=[];
对于(var j=0;j<100;j++){
k=k+1;
数组[i].push(k);
}
}
var针=130;
var结果=getIndexOfK(数组,指针);

console.log('值#'+pinder+'位于数组['+result[0]+']['+result[1]+']);
此示例似乎也适用于不规则多维数组:

function findIndex(valueToSearch, theArray, currentIndex) {
    if (currentIndex == undefined) currentIndex = '';
        if(Array.isArray(theArray)) {
            for (var i = 0; i < theArray.length; i++) {
                if(Array.isArray(theArray[i])) {
                    newIndex = findIndex(valueToSearch, theArray[i], currentIndex + i + ',');
                    if (newIndex) return newIndex;
               } else if (theArray[i] == valueToSearch) {
                   return currentIndex + i;
               }
            }
    } else if (theArray == valueToSearch) {
        return currentIndex + i;
    }
    return false;
}

var a = new Array();
a[0] = new Array(1, 2, 3, 4, 5);
a[1] = 'ciao';
a[2] = new Array(new Array(6,7),new Array(8,9),10);

var specificIndex = findIndex('10', a);
函数findIndex(值搜索、数组、当前索引){
如果(currentIndex==未定义)currentIndex='';
if(Array.isArray(theArray)){
对于(变量i=0;i
我写这篇文章很快,所以邀请每个人来改进这个功能

p、 现在该函数返回一个字符串值,所有索引都用逗号分隔,您只需编辑它即可返回一个对象


我的代码就像MS Excel中的PROCV…并且只在第一列中标识索引搜索。可能对您(或其他人)有所帮助


ES6使这变得相当容易

function findIndexOfNestedArray(nestedArray, searchArray) {
  return searchArray.findIndex(item => {
    return item.length === nestedArray.length
    && item.every((a, i) => a === nestedArray[i])
  })
}

复制并粘贴此代码

替换为主阵列(嵌套所有其他阵列的阵列)

代码:

我一直在寻找删除阵列内部阵列的解决方案,并提供了这个丑陋但高效的解决方案: 与数组的数组一起工作(两次),但没有进一步或更深的嵌套


此代码将嵌套数组转换为字符串=>逐个记录为临时数组=>每次记录时比较当前记录的字符串是否已在数组中。如果重复,则从主数组中删除(您的)和stringArray元素

您必须迭代元素以查找嵌套值。什么是
k
?现在,上面的代码会导致错误,因为您试图读取
k
的值,但是
k
没有在任何地方声明。t-j-crowder:k是一个全局变量,设置为0。对于
var convertToRoman = function (valueLimitTen) {   
  var convertTable = [  [1, "I"],
                        [2, "II"],
                        [3, "III"],
                        [4, "IV"],
                        [5, "V"],
                        [6, "VI"],
                        [7, "VII"],
                        [8, "VIII"],
                        [9, "IV"],
                        [10, "X"],
                      ];

  var myIndex;  
  for(var i in convertTable){
    if(convertTable[i][0] == valueLimitTen){
      myIndex = i;      
      return convertTable[i][1];      
    }  
  }  
}

console.log(convertToRoman(2)); //Result II
console.log(convertToRoman(10)); //Result X
function findIndexOfNestedArray(nestedArray, searchArray) {
  return searchArray.findIndex(item => {
    return item.length === nestedArray.length
    && item.every((a, i) => a === nestedArray[i])
  })
}
//Remove Duplicates
  let stringArray = masterArray.map(item=>item.join('')); // transform all nested arrays into strings (for comparation)
  let nonDuplicated = [] // temporary array to compare data
  stringArray.forEach(nestedArrayString=>{
    let reapeatedIndex = nonDuplicated.indexOf(nestedArrayString); // this is the comparator
    if(reapeatedIndex>0){
      indexToRemove = stringArray.indexOf(nestedArrayString);
      console.log('---indexToRemove',indexToRemove)
      stringArray.splice(indexToRemove,1);
      masterArray.splice(indexToRemove,1);
    }else{nonDuplicated.push(nestedArrayString)}
  });
  //
  let lastString = stringArray.filter(foundString=>foundString===stringArray[stringArray.length-1])
  if(lastString.length>1){
    stringArray.splice(stringArray.length-1,1)
    masterArray.splice(masterArray.length-1,1)
  };
    console.log('>> masterArray',masterArray)