【问题标题】:Javascript to get last value of json objectJavascript获取json对象的最后一个值
【发布时间】:2015-04-24 17:11:27
【问题描述】:

我需要像这样的 json 对象的最后一个元素:

{
  "results": {
    "collection1": [
      {
        "price": [
          "95",
          "80"
        ],
      },
      {
        "price": "68"
      },

.....

这是我的功能:

function transform(data) {
  for (var i = 0; i < data.results.collection1.length; i++){
    var price = data.results.collection1[i].price;
    data.results.collection1[i].price = price[price.length-1];
  }

  return data;
}

我需要得到价格的最后值。在第一个中它将是 80 在第二个 68 中。当我使用

price_last = data.collection.price[data.collection.price.length-1];

第一个价格元素给我 80,第二个给我 8.. 但我需要 68。

【问题讨论】:

  • 第一个price数组中获取80的规则是什么?
  • 那个 JSON 似乎没有明确的架构。
  • 规则是data.collection.price[data.collection.price.length-1];对于第一个它可以工作(因为它是一个数组),但对于第二个它会削减 68 并得到 8。
  • 我无法给出明确的架构,因为总 json 太长了。这只是一小部分。

标签: javascript object get element


【解决方案1】:

试试这个:

if (Array.isArray(data.collection.price)) {
    price_last = data.collection.price[price.length-1];
} else {
    price_last = data.collection.price;
}

【讨论】:

    【解决方案2】:

    问题是第一个price 属性是一个数组,第二个是一个字符串。理想情况下,即使您只有一个价格,您也会将 price 设为一个数组。

    否则,您必须检查 price 属性是否为数组:

    data.collection.price instanceof Array ? 
        data.collection.price[data.collection.price.length - 1] : 
        data.collection.price;
    

    如果它是数组,此语句将获取最后一个元素,如果不是,则返回 price 属性。

    【讨论】:

      【解决方案3】:

      把你的函数改成这个

      function transform(data) {
              for (var i = 0; i < data.results.collection1.length; i++) {
                  var price = data.results.collection1[i].price;
                  if (Object.prototype.toString.call(price) === '[object Array]'){
                      data.results.collection1[i].price = price[price.length - 1];
                  } else {
                      data.results.collection1[i].price = price;
                  }
              }
      
              return data;
          }
      

      注意:Array.isArray 是一个 Ecmascript 5 函数,可能不会在所有环境中定义。

      【讨论】:

      • 他编辑了这个问题。原文有错误。他引用的是未定义的 [price]
      【解决方案4】:

      试试 data.collection1[data.collection1.length - 1].price;

      【讨论】:

        猜你喜欢
        • 2011-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-06
        • 1970-01-01
        • 2019-04-03
        • 1970-01-01
        • 2021-12-26
        相关资源
        最近更新 更多