【问题标题】:Can't access data inside array that looks like JSON. JavaScript无法访问看起来像 JSON 的数组内的数据。 JavaScript
【发布时间】:2017-08-23 15:43:49
【问题描述】:

下面,我有一个看起来像 JSON 数据的数组。我通过查询某些内容并将其推送到var test = []; 得到这个结果。我将字符串和数字附加到我的test 数组中的方式是运行test.push({item_name: name, number_of_items: number});。需要明确的是,它不是 JSON:

[{"item_name":"Peri Peri Chicken","number_of_items":6},{"item_name":"Deep fried beef","number_of_items":22},{"item_name":"Roast chicken","number_of_items":7},{"item_name":"Chow Mein","number_of_items":3},{"item_name":"Sweet and sour noodles","number_of_items":5},{"item_name":"Steak","number_of_items":32}]

现在,我想对数组进行排序,使其显示从最大的number_of_items 到最小的number_of_items 的数组。

我尝试像使用 JSON 数组一样对其进行排序,但它不起作用,因为我意识到我无法使用 test.number_of_items 访问该数组中的元素。我尝试了THIS 方法对数组进行排序,但它对我不起作用,因为我的数据不在 JSON 中。

如果有人能告诉我是否有更好的方法将多个数据附加到数组的同一索引中,并且将来能够更轻松地访问这些元素,那也会很有帮助?因此,例如,在索引 1 上,我会有类似 (elem1: string1, elem2: number1) 的内容,然后是索引 2 (elem1: string2, elem2: number2) 和 ...

【问题讨论】:

  • 它是 JSON(在您的示例中,JSON 只是一个符号)。您的数组元素是对象。您的对象可以通过数组索引来寻址,具有这些对象元素的值可以通过键来寻址。非常基本的 JSON 和 Javascript 语法,所以只需练习即可。

标签: javascript arrays sorting append


【解决方案1】:

试试这个:

  test = [{"item_name":"Peri Peri Chicken","number_of_items":6},   {"item_name":"Deep fried beef","number_of_items":22},{"item_name":"Roast chicken","number_of_items":7},{"item_name":"Chow Mein","number_of_items":3},    {"item_name":"Sweet and sour noodles","number_of_items":5},{"item_name":"Steak","number_of_items":32}];

  test.sort(function(a, b) {
    return a.number_of_items - b.number_of_items;
  });

祝你好运

【讨论】:

  • number_of_items已经是数字了,不用parseInt()
  • @n00dl3,我的错
  • 谢谢,此代码有效!我已经为此苦苦挣扎了很长时间。
【解决方案2】:

您可以将其解析为 JSON,对其排序,然后将其转回字符串,如下所示:

var array = [
    { "item_name": "Peri Peri Chicken", "number_of_items": 6 },
    { "item_name": "Deep fried beef", "number_of_items": 22 },
    { "item_name": "Roast chicken", "number_of_items": 7 },
    { "item_name": "Chow Mein", "number_of_items": 3 },
    { "item_name": "Sweet and sour noodles", "number_of_items": 5 },
    { "item_name": "Steak", "number_of_items": 32 }
];

var compare = (a,b) => {
  if (a.number_of_items < b.number_of_items)
    return 1;
  if (a.number_of_items > b.number_of_items)
    return -1;
  return 0;
};

var test = JSON.parse(array);
test.sort(compare);
array = JSON.stringify(test);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2021-11-23
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    相关资源
    最近更新 更多