【问题标题】:JavaScript: Iterating through multi-dimensional arrays and extracting multiple search valuesJavaScript:遍历多维数组并提取多个搜索值
【发布时间】:2014-06-13 23:40:27
【问题描述】:

我想做的事:

使用多个搜索字符串搜索多维数组。

我目前正在做的示例:

var multiArray = [['Apples and pears', 'tuna salad'],['bananas tuna'],['the colour blue']];

var singleArray = [];

var match_array = [];

// Turn multiple arrays into one big one
    for (var i = 0; i < multiArray.length; i++) {

        for (var x = 0; x < multiArray[i].length; x++) {

            singleArray.push(multiArray[i][x]);
    }
}

// Create a new array from matched strings

function find_match(to_match) {

    for (var i in singleArray) {

        if (singleArray[i].indexOf(to_match)!= -1)

        match_array.push(singleArray[i]);
    }

    return (match_array.length === 0 ? null : match_array);

}

// Find matching terms for match_array
find_match('tuna');
find_match('the');

alert(match_array);

JSFiddle Demo

问题:

  1. 显然这是一种杂乱无章的做法。怎么会这样 精简(即直接搜索multiArray 而不是使用 多个find_match函数)?

  2. 我怎样才能只得到精确的字符串匹配,最好不破坏多维数组?

  3. 您对通过海量搜索有何想法 多维数组?

【问题讨论】:

    标签: javascript arrays multidimensional-array


    【解决方案1】:

    你想要这样的东西吗?

    var multiArray = [['Foo', 'Bar'],['Foo'],['Bar']];
    
    var singleArray = [];
    
    var match_array = [];
    
    // Turn multiple arrays into one big one
    for (var i = 0; i < multiArray.length; i++) {
        for (var x = 0; x < multiArray[i].length; x++) {
            singleArray.push(multiArray[i][x]);
        }
    }
    
    // Create a new array from matched strings
    function find_match(to_match, where_search) {
    
        for (var j in where_search) {
            if(where_search[j] instanceof Array){
               find_match(to_match, where_search[j]);
    
            }else{
                for (var i in to_match) {
                    if (where_search[j].indexOf(to_match[i]) ==0 && 
                        where_search[j].length == to_match[i].length)
                        match_array.push(where_search[j]);
                }
            }
        }
    
        return (where_search.length === 0 ? null : match_array);
    
    }
    
    // Find matching terms for match_array
    find_match(['Foo', 'Bar'],multiArray);
    
    alert(match_array);
    

    【讨论】:

    • 当我通过 JSFiddle 运行这个脚本时,它只会提示“金枪鱼沙拉”。
    • 不完全...现在它正在提醒“金枪鱼沙拉”、“香蕉金枪鱼”
    • 多数组内是否需要匹配整个数组搜索?示例:multi=[['Foo','Bar'],['Foo'],['Bar']] 搜索 ['Foo','Bar'] - 返回 ['Foo','Bar'] ?
    • 理想情况下,使用您的示例,搜索 ['Foo','Bar'] return ['Foo','Bar','Foo','Bar']
    • 立即尝试。 如何简化(即直接搜索 multiArray 而不是使用多个 find_match 函数)? 您可以将新函数添加到 Array.示例:Array.prototype.add =
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 2023-04-10
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 2012-03-05
    • 2020-09-28
    相关资源
    最近更新 更多