【问题标题】:JS: name/val pairs to arrayJS:名称/值对到数组
【发布时间】:2013-10-15 18:06:04
【问题描述】:

我使用的是一种在语法上类似于 javascript 的一次性语言,所以用这种更常见的语言回答就足够了。

我有一个名称/值对的列表,它是从一个看起来像这样的大 GET 字符串构建的

"n1=v1,n2=v2..."

我不确定我最初的方法是否正确。我在这种语言中使用了原语

tolist(GETstring,"=")

将名称值对拆分为上述列表。也许,这是从门口走错路。

这给了我

data = [["n1","v1"],["n2","v2"],...]

我正在尝试将其更改为命名数组,例如

data["n1"]="v1";
data["n2"]="v2";
...

这样我就可以按名称访问项目,而不是按列表索引(因为它是高度可变的)

以这种格式获取数据的更好方法是什么。我尝试了一些,包括评估,但似乎没有任何效果。

【问题讨论】:

  • 如果排序不重要(或者数据可以稍后排序)并且键都很好地映射到字符串,请使用“普通对象”作为映射/字典。在这种情况下,对现有数据使用循环相当简单,不需要eval

标签: javascript arrays list


【解决方案1】:

你必须拆分字符串然后遍历它。

var obj = {};
var originalString = "n1=v1,n2=v2";
var splitOriginalString = originalString.split(",");
for (var i = 0; i < splitOriginalString.length; i++) {
    var tmpObj = splitOriginalString[i].split("=");
    obj[tmpObj[0]] = tmpObj[1];
}

【讨论】:

  • 我认为您想使用for (var k = 0; k &lt; splitOriginalString.length; k++),因为您访问的是数组而不是对象属性。
  • 以上代码按预期工作http://jsfiddle.net/byYaH/1/
  • 虽然它有效,但它不是一个好主意。例如,看这里:stackoverflow.com/questions/500504/…(既然使用其他方法很容易,为什么不使用它呢?)
  • @Todd,我已经更新了答案,因为您提到的帖子建议在 javascript 中使用数组时,处理器有时会出现长度错误。我还没有体验过这个结果,但正如你所说,使用替代方法很容易,所以为什么不使用它。另外,如果迭代大量数据,使用for(var i =0;... 会表现得更好。
  • 谢谢,我已经修改了一些以适应语言并且我现在有一些对象对:)
【解决方案2】:

没有办法做到这一点。你有两种方法可以做workaround

  1. 创建两个数组,一个用于键,一个用于值。

    var indexes = ["test", "test2"];
    var values = ["val", "val2"];
    var value = values[indexes.indexOf("test2")]; // will get "val2"
  2. 使用键 0 作为字符串键并使用 1 作为值创建嵌套数组。

【讨论】:

    猜你喜欢
    • 2014-10-20
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多