【问题标题】:Javascript: how to access each element in an arrayJavascript:如何访问数组中的每个元素
【发布时间】:2016-11-14 00:35:50
【问题描述】:

我从数据库中查询两个数组并将它们转换为 json 格式。设置是这样的:

{"groups":"[apple,bee,car,dogs,egos,fruits]", "members":"[g,h,i,j,k,l]"}

我正在尝试访问组中的每个元素。组数组是一个列表。我尝试使用索引,它返回给我 groups[0] = 'a', groups[1] = 'p'... 所以使用索引不起作用。

我还想计算组数组或成员数组中有多少元素,使用 .length 只会给我返回字符长度,而不是实际的元素数量。

任何建议将不胜感激。谢谢。

【问题讨论】:

  • 听起来您可能没有将 json 正确解析为字符串数组
  • JSON 支持数组,没有理由尝试将值添加为字符串。

标签: javascript jquery json indexing


【解决方案1】:

JSON.parse(groups) 将不起作用,因为[apple,bee,car,dogs,egos,fruits] 不是正确的 JSON 字符串。

["apple","bee","car","dogs","egos","fruits"] - 是正确的 JSON 字符串,可以解析。

附: members 也不是正确的 JSON 字符串。

// If you have some data

data = {
  groups: ["apple", "bee", "car", "dogs", "egos", "fruits"],
  members: ["g", "h", "i", "j", "k", "l"]
};

// you can convert it to JSON string

jsonData = JSON.stringify(data);
console.log('JSON data: ', jsonData);

// and then parse this string

restoredData = JSON.parse(jsonData);

// after this you can access object members again

console.log('groups[0]: ', restoredData.groups[0]);

【讨论】:

  • 你是对的,我在我的回答中添加了一个可能的解决方案。
  • 这是一个有效的 JSON 字符串,解析为一个无效的数组。 ["apple","bee","car","dogs","egos","fruits"] 不是 JSON 字符串,只是一个数组值。
  • 我同意@SpencerWieczorek。我只是说 OP 想要恢复的不是有效的 JSON 数组字符串。
  • @LeonidZakharov 既然是从数据库中查询出来的数组,那么如何给数组的每个元素加上双引号呢??
  • @moffittime 你能显示返回 JSON 的代码吗
【解决方案2】:

这是因为"[apple,bee,car,dogs,egos,fruits]" 它是一个字符串。您必须在访问元素之前对其进行解析。

假设您在变量test 中有JSON,那么我们必须删除[] 并像这样拆分字符串:

test.groups = test.groups.replace("[", "")
test.groups = test.groups.replace("]", "")
test.groups = test.groups.split(',')

然后现在它包含:

["apple", "bee", "car", "dogs", "egos", "fruits"]

【讨论】:

    【解决方案3】:

    您应该考虑以不同于数据库的方式构造数组。

    你得到这些字母是因为它们在你用索引引用的字符串中的位置。

    考虑使用正则表达式和split() 函数来解析它们现在的样子:

    var obj = {"groups":"[apple,bee,car,dogs,egos,fruits]", "members":"[g,h,i,j,k,l]"};
    
    // Regex replaces the square brackets with blank spaces and splits by the
    // comma into an array
    var groups = obj.replace(/[\[\]']+/g,'').split(',');
    var members = obj.replace(/[\[\]']+/g,'').split(',');
    

    现在groups[1] 将返回“蜜蜂”。

    阅读更多关于split()here的信息。

    【讨论】:

    • 你对变态很了解))
    • 不,这是字面意思。
    【解决方案4】:

    它不起作用,因为数组的所有元素都在一个字符串中。

    如前所述,这不是正确的 JSON 格式,但有时您无法控制获取信息的方式。因此,虽然这不是推荐的答案,但您可以使用简单的字符串解析来获取您想要的值,例如:

    var stuff = JSON.parse('{"groups":"[apple,bee,car,dogs,egos,fruits]", "members":"[g,h,i,j,k,l]"}');
    
    var groups = stuff.groups.split("[")[1].split("]")[0].split(",");
    var members = stuff.members.split("[")[1].split("]")[0].split(",");
    
    console.log(groups); // ["apple", "bee", "car", "dogs", "egos", "fruits"]
    console.log(groups[1]); //bee
    console.log(members[0]); //g
    

    我想重申,这不是一个理想的解决方案,但有时您只能这样做。

    【讨论】:

      猜你喜欢
      • 2013-04-06
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 2017-09-20
      • 1970-01-01
      • 2012-04-27
      相关资源
      最近更新 更多