【问题标题】:Array search in Javascript not workingJavascript中的数组搜索不起作用
【发布时间】:2015-10-08 03:21:24
【问题描述】:

我有以下数据结构:

var map_neighbours = [{
    "Alaska": ["UstKamchatsk", "Yukon"]
}, {
    "Algeria": ["Chad", "Egypt", "SierraLeone", "Spain"]
}, {
    "AntarticWildlifeTerritory": ["AustralianAntarticTerritory", "SouthAfricanAntarticTerritory"]
}, .....]

用户通过页面选择一个区域,我想循环这个结构,找到区域,然后循环子区域(在对应的位置)。

例如,对于Algeria,我想从循环中一一获取"Chad", "Egypt", "SierraLeone", "Spain"

我已经尝试了一些变体但没有成功(region 如上所述由用户提供):

var neighbourArray = map_neighbours[region];

$.each(neighbourArray, function(idx, val) {

    console.log("Neighbours= " + neighbourArray[region][idx]);

});

$.each(map_neighbours, function(outer, val) {

    if (map_neighbours[outer] == region) {

        neighbourArray = (map_neighbours[outer][]);

        $.each(neighbourArray, function(inner, val) {

            console.log("Neighbours= " + neighbourArray[outer][inner]);

        });

     );

};

感谢您的建议。

【问题讨论】:

  • 应该是= >,还是应该是:

标签: javascript arrays json loops


【解决方案1】:

使用您当前的结构,您需要遍历数组并查看该项目是否具有输入值作为键,例如

var map_neighbours = [{
  "Alaska": ["UstKamchatsk", "Yukon"]
}, {
  "Algeria": ["Chad", "Egypt", "SierraLeone", "Spain"]
}, {
  "AntarticWildlifeTerritory": ["AustralianAntarticTerritory", "SouthAfricanAntarticTerritory"]
}];

var input = 'Algeria',
  result;
$.each(map_neighbours, function(i, item) {
  if (item[input]) {
    result = item[input];
    return false;
  }
})

if (result) {
  snippet.log(JSON.stringify(result));
} else {
  snippet.log('not found')
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

但是处理这种情况的更好的结构是使用键值对象而不是对象数组

var map_neighbours = {
  "Alaska": ["UstKamchatsk", "Yukon"],
  "Algeria": ["Chad", "Egypt", "SierraLeone", "Spain"],
  "AntarticWildlifeTerritory": ["AustralianAntarticTerritory", "SouthAfricanAntarticTerritory"]
};

var input = 'Algeria',
  result = map_neighbours[input];

if (result) {
  snippet.log(JSON.stringify(result));
} else {
  snippet.log('not found')
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

【讨论】:

    猜你喜欢
    • 2011-10-04
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    相关资源
    最近更新 更多