如何从javascript中的multidimensionnal表中获取值?

时间:2016-11-06 12:59:09

标签: javascript multidimensional-array

我有一系列网址。我插入这样的值:

while True:

 num = input()
 def val(n):
    if n == 1:
        rom = 'I'
        return rom
    if n == 4:
        rom = 'IV'
        return rom
    if n == 5:
        rom = 'V'
        return rom
    if n == 9:
        rom = 'IX'
        return rom
    if n == 10:
        rom = 'X'
        return rom
    if n == 40:
        rom = 'XL'
        return rom
    if n == 50:
        rom = 'L'
        return rom
    if n == 90:
        rom = 'XC'
        return rom
    if n == 100:
        rom = 'C'
        return rom
    if n == 400:
        rom = 'CD'
        return rom
    if n == 500:
        rom = 'D'
        return rom
    if n == 900:
        rom = 'CM'
        return rom

 def lastdigit(num02):
    num02 = num % 10
    num03 = num % 5
    if 9 > num02 > 5:
        return str('V' + 'I'*num03)
    elif num02 < 4:
        return str('I'*num03)
    else:
        return str(val(num02))

 k3 = lastdigit(num)

 def tensdigit(num12):
    num12 = num % 100 - num % 10
    num13 = num % 50
    if 90 > num12 > 50:
        return str('L' + 'X'*(num13/10))
    elif num12 < 40:
        return str('X'*(num13/10))
    else:
        return str(val(num12))

 k2 = tensdigit(num)

 def hundigit(num112):
    num112 = (num % 1000 - num % 100)
    num113 = num % 500
    if 900 > num112 > 500:
        return str('D' + 'C'*(num113/100))
    elif num112 < 400:
        return str('C'*(num113/100))
    else:
        return str(val(num112))

 k1 = hundigit(num)

 print '%s%s%s' %(k1,k2,k3)

这是一个这样的URL数组的示例:

 var replacementArray=[];
    function insert(arr,url, shorturl) {
            arr.push({
                url: url,
                shorturl: shorturl
            });
        }

我必须将此数组的shorturl与字符串进行比较。如果字符串匹配,那么我检索网址。这是我第一次尝试这样做:

 replacementArray:{
    [url:"tuto.com", shorturl:"xfm1")],
    [url:"youtube.com", shorturl:"xfm2")], 
    [url:"google.com",shorturl:"xfm3"]}

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

4 个答案:

答案 0 :(得分:2)

javascript

中不存在具有任意键的关联数组

您可以使用作为关联数组的数据,但是您需要使用对象来存储键。

您提供的示例数据无效JS。它是数组的对象,而不是对象数组。为了使您的功能按预期工作,数据 需要采用以下格式:

[
    {
        url: 'tuto.com',
        shorturl: 'xfm1'
    },
    {
        url: 'youtube.com',
        shorturl: 'xfm2'
    },
    // etc...
]

[]用于创建一个只有数字索引的数组。

{}创建的对象可以存储键值对,就像其他语言中的关联数组一样。

因此,在您的函数中,您可以通过递增i来遍历数组索引,并使用replacementArray[i].shorturlreplacementArray[i]['shorturl']访问与您的键相关联的值(注意字符串) - 您的方式这取决于你的偏好,它们都是一样的。

希望这有帮助!

答案 1 :(得分:1)

var arr=[];
function insert(arr,url, shorturl) {
  arr.push({
    url: url,
    shorturl: shorturl
  });
}
insert(arr,"google.com", "xfm.io1"); 
insert(arr,"gogle.com", "xfm.io2"); 
insert(arr,"gole.com", "xfm.io3");

function getUrl(yourVariable){ //chaine
  for(var j=0;j<arr.length;j++)
    if (arr[j].shorturl == chaine){
      return arr[j].url;
    }
  return null;//not found yourVariable
}
var chaine= "xfm.io1"; //your Short URL
console.log(getUrl(chaine)); //testing the function

首先,您给出了:(这不是一个可接受的数据结构)

replacementArray:{
    [url:"tuto.com", shorturl:"xfm1")],
    [url:"youtube.com", shorturl:"xfm2")], 
    [url:"google.com",shorturl:"xfm3"]}

必须是这样的:(对象数组)

replacementArray:[
    {url:"tuto.com", shorturl:"xfm1"},
    {url:"youtube.com", shorturl:"xfm2"}, 
    {url:"google.com",shorturl:"xfm3"}]

然后获取shortUrl代码就像

function getUrl(yourVariable){ //chaine
    for(var j=0;j<replacementArray.length;j++)
        if (replacementArray[j].shorturl == chaine){
            return replacementArray[j].url;
        }
    return null;//not found yourVariable
}

答案 2 :(得分:0)

在'for'循环中试试这个:

if(replacementArray[j].shorturl == chaine){
    // Do stuff here...
}

使用[shorturl],您将根据shorturl的值访问属性名称,该值未定义。

答案 3 :(得分:0)

阅读这些更正/建议:

  1. 正如其他人所提到的,你应该创建一个array objects,而不是一个带数组的对象
  2. 参考该物业&#39; shorturl&#39;使用数组语法(即replacementArray[j]['shorturl'])或点符号(即replacementArray[j].shorturl)。如果使用数组语法,那么属性需要在字符串文字中(除非您创建一个变量来表示字段 - 例如var shorturl = 'shorturl';)。
  3. &#13;
    &#13;
    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);
    &#13;
    &#13;
    &#13;

    1. 考虑使用Array.prototype.find()或类似的功能样式方法(例如filter(),如果您想要找到多个值)来确定具有匹配的shorturl值的网站。这样您就不必担心创建和递增迭代器变量(即j)并使用它来引用数组中的元素。有关详细信息,请尝试these exercises about functional programming in JS
    2. &#13;
      &#13;
      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);
      }
      &#13;
      &#13;
      &#13;