如何在数组中搜索

时间:2016-02-20 08:20:20

标签: javascript search

我有JavaScript数组包含这样的链接:

var urls = ['url1','url2','url3'];
  if (urls.indexOf(window.location.hostname) > -1)
{
  // do something ...
}
else {
  window.location.href = 'redirect url';
}

这段代码运行良好,但我尝试将其转换为这样的对象数组:

var urls = [
  {
    'url':'url1'
  },
  {
    'url':'url2'
  },
  {
    'url':'url3'
  },
];
if (urls.url.indexOf(window.location.hostname) > -1)
{
  // do something ...
}
else {
  window.location.href = 'redirect url';
}

但是这段代码没有用!!

如何将第一个代码转换为对象数组,或者如何在数组中搜索?

5 个答案:

答案 0 :(得分:1)

最简单的解决方案是使用array.some

if(urls.some(function(item) { return item.url == window.location.hostname;})) {
    // do something ...
} else {
    window.location.href = 'redirect url';
}

更可读

var found = urls.some(function(item) { 
    return item.url == window.location.hostname;
});
if(found) {
    // do something ...
} else {
    window.location.href = 'redirect url';
}

答案 1 :(得分:0)

首先:urls变量的两个定义都是JSON:

  1. 第一个定义是JSON表示法中的字符串数组
  2. 第二个定义是一个对象数组,每个对象由一个属性url组成一个字符串。
  3. 为了搜索第二个,你需要显式迭代对象数组并明确地比较属性(作为一种方法):

    var found = false;
    for ( var n = 0; n < urls.length; n++ )
    {
        if ( urls[n].url == window.location.hostname )
        {
           /// do something
    
           found = true;
           break;
        }
    }
    if ( !found )
    {
    
      // do something other
    
    }
    

答案 2 :(得分:0)

或者可能是

if(urls.map(function(obj){ return obj.url}).indexOf(window.location.hostname)>0){
  // do something ...
}
else {
  window.location.href = 'redirect url';
}

答案 3 :(得分:0)

对于对象数组,您无法访问代码中所执行的元素。你必须使用一个循环遍历元素或内置函数,如filtermap。如果不使用内置函数,你可以做这样的事情来完成你的工作。

用于搜索数组中特定网址的功能

/customers
/customers/add
/orders/edit/29
etc.

将下面一段代码放在要检查条件的地方

function findURL(array,url) {

    for (var i = 0; i < array.length; i++) {

        if (array[i].url == url) {
            return i;
        }
    }
    return -1;
}

有一些答案描述了如何在你的场景中应用过滤器和地图方法。因此,我不想把这些放在我的答案中。

如果使用jquery,则会有一个名为grep的函数,它返回找到的项目数组。

var urls = [
    {
        'url':'url1'
    },
    {
        'url':'url2'
    },
];

if(findURL(urls,window.location.hostname) > -1){
    //do something ..
}else{
    window.location.href = 'redirect url';
}

答案 4 :(得分:0)

使用lodash版本4或更高版本,您可以执行此操作:

if (_(urls).map('url').includes(window.location.hostname)) {
  // do something...
} else {
  window.location.href = 'redirect url';
}