我有一个网址数组。我将这样的值插入其中:
var replacementArray=[];
function insert(arr,url, shorturl) {
arr.push({
url: url,
shorturl: shorturl
});
}
这是一个这样的URL数组的示例:
replacementArray:{
[url:"tuto.com", shorturl:"xfm1")],
[url:"youtube.com", shorturl:"xfm2")],
[url:"google.com",shorturl:"xfm3"]}
我必须将这个数组的shorturl与一个字符串进行比较。如果字符串匹配,那么我检索网址。这是我第一次尝试这样做:
var chaine="xfm1";//this is an example
for(var j=0;j<replacementArray.length;j++)
if (replacementArray[j][shorturl]==chaine){
var url= replacementArray[url];
}
这似乎不起作用。这是为什么?
最佳答案
阅读以下更正/建议:
正如其他人提到的那样,您应该创建array的objects,而不是带有数组的对象
使用数组语法(即replacementArray[j]['shorturl']
)或点表示法(即replacementArray[j].shorturl
)引用属性'shorturl'。如果您使用数组语法,则该属性必须位于字符串文字中(除非您创建用于表示该字段的变量-例如var shorturl = 'shorturl';
)。
var replacementArray = [];
function insert(arr, url, shorturl) {
arr.push({
url: url,
shorturl: shorturl
});
}
//utilize the function declared above
insert(replacementArray ,"tuto.com", "xfm1");
insert(replacementArray, "youtube.com", "xfm2");
insert(replacementArray, "google.com", "xfm3");
var chaine = "xfm1"; //this is an example
var url; //declare url here so it won't be undefined if no url is found in the array
for (var j = 0; j < replacementArray.length; j++) {
if (replacementArray[j]['shorturl'] == chaine) {
//need to reference replacementArray[j] instead of replacementArray['url']
url = replacementArray[j]['url'];
}
}
console.log('url: ',url);
考虑使用Array.prototype.find()或类似的功能样式方法(例如,如果要查找多个值,例如filter())来确定具有匹配shorturl值的网站。这样一来,您不必担心创建和增加迭代器变量(即
j
)并使用它来引用数组中的元素。有关更多信息,请尝试these exercises about functional programming in JS。var replacementArray = [];
function insert(arr, url, shorturl) {
arr.push({
url: url,
shorturl: shorturl
});
}
//utilize the function declared above
insert(replacementArray ,"tuto.com", "xfm1");
insert(replacementArray, "youtube.com", "xfm2");
insert(replacementArray, "google.com", "xfm3");
var chaine = "xfm1"; //this is an example
var foundSite = replacementArray.find(function(site) {
return (site.shorturl == chaine);
});
if (foundSite) { //if we did find a matching site
var url = foundSite.url;
console.log('url: ',url);
}