我有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';
}
但是这段代码没有用!!
如何将第一个代码转换为对象数组,或者如何在数组中搜索?
答案 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:
url
组成一个字符串。为了搜索第二个,你需要显式迭代对象数组并明确地比较属性(作为一种方法):
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)
对于对象数组,您无法访问代码中所执行的元素。你必须使用一个循环遍历元素或内置函数,如filter,map。如果不使用内置函数,你可以做这样的事情来完成你的工作。
用于搜索数组中特定网址的功能
/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';
}