我有一个网址数组。我将这样的值插入其中:

 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];
         }


这似乎不起作用。这是为什么?

最佳答案

阅读以下更正/建议:


正如其他人提到的那样,您应该创建arrayobjects,而不是带有数组的对象
使用数组语法(即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);
}

10-05 18:34