2017-02-13 139 views
2

我想从对象中的数组获取值。如何从JS对象中的数组获取值

这是数据:

{ 
    "Order Number":102541029, 
    "Tracking Number":192048236154915, 
    "Secondary Tracking":87350125235, 
    "Items":[{ 
    "SKU":"0200-02-01-NP-P-00", 
    "QTY":4 
    }, 
    { 
    "SKU":"0120-02-01-XP-T-00", 
    "QTY":2 
    }] 
    } 

如果我想要的,比方说,第二项的数量(SKU 0120-02-01-XP-T-00),我将如何选择呢?

我试过几件事情是这样的:

var skuQty = datain.items.['0120-02-01-XP-T-00'].['QTY']; 

这就是这个想法,但我没有使用正确的语法明显。这里有帮助吗?

  • 杰西
+0

我首先回顾一下数组的文档。例如,[MDN的数组文档](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)。 –

回答

1

这是你如何滚动的数量:

var yourObject = { 
 
    "Order Number":102541029, 
 
    "Tracking Number":192048236154915, 
 
    "Secondary Tracking":87350125235, 
 
    "Items":[{ 
 
    "SKU":"0200-02-01-NP-P-00", 
 
    "QTY":4 
 
    }, 
 
    { 
 
    "SKU":"0120-02-01-XP-T-00", 
 
    "QTY":2 
 
    }] 
 
    }; 
 

 
var items = yourObject.Items; 
 

 
for (var i = 0; i < items.length; i ++){ 
 
    console.log(items[i].QTY); 
 
}

一般来说,你可以用它的索引像这样访问数组:arr[i]和对象可以通过它来访问关键名称:

`yourObject.yourkey` 
1

首先,选择指定的对象 - 在你的情况 - data

然后从data对象中选择指定的key - 您的情况 - Items

由于Items是一个包含两个对象的数组,因此您必须指定您感兴趣的其中一个。在您的情况中 - 第二个索引为1

data.Items[1]是一个持有两个职位的对象。你对第二个感兴趣 - 所以你只需输入该密钥名称 - QTY

将它们加在一起 ​​- data.Items[1].QTY

var data = { 
 
    "Order Number": 102541029, 
 
    "Tracking Number": 192048236154915, 
 
    "Secondary Tracking": 87350125235, 
 
    "Items": [{ 
 
    "SKU": "0200-02-01-NP-P-00", 
 
    "QTY": 4 
 
    }, { 
 
    "SKU": "0120-02-01-XP-T-00", 
 
    "QTY": 2 
 
    }] 
 
}; 
 

 
console.log(data.Items[1].QTY)

0

这是你如何得到它:

Object {Order Number: 102541029, Tracking Number: 192048236154915, Secondary Tracking: 87350125235, Items: Array[2]} 
obj.Items[0] 
Object {SKU: "0200-02-01-NP-P-00", QTY: 4} 
obj.Items[0].QTY 

obj = { 
 
    "Order Number":102541029, 
 
    "Tracking Number":192048236154915, 
 
    "Secondary Tracking":87350125235, 
 
    "Items":[{ 
 
    "SKU":"0200-02-01-NP-P-00", 
 
    "QTY":4 
 
    }, 
 
    { 
 
    "SKU":"0120-02-01-XP-T-00", 
 
    "QTY":2 
 
    }] 
 
    }; 
 
console.log(obj.Items[0].QTY);

0

因为items是一个数组,你需要选择适当的阵列的dex,在这种情况下为1. 例如:

var skuQty = datain.items [1]。数量;

+0

不完全。使用括号语法或点语法,但不能同时使用... –

+0

Ty,用适当的更改编辑代码块。 – tomato

1

in JavaScript,an 0可以通过array[index]访问。

如果你有一个数组,看起来像这样:array = [{ prop: propValue }],那么这几乎是一样的obj = { prop: propValue }; array = [ obj ],所以你需要做的就是propValue是什么array[ 0 ]['prop']

针对您的特殊情况下,你需要

datain.Items[1]['SKU'];

现在,你真正想要做的是通过数组项过滤器,直到输入的值是"0120-02-01-XP-T-00"

这是字面上过滤阵列:

datain.Items.filter(function(obj){ return obj['SKU'] === "0120-02-01-XP-T-00" })[0]['QTY']

的关键是array.filter(fn)返回一个新的数组值,fn(item [, other parameters you don't need to worry about])true(或truthy)。在这一点上,你只需要在第一个项目,在index = 0

0

您可以使用Array.prototype.filter(),在回调返回o.SKU === "0120-02-01-XP-T-00",其中o在迭代中使用括号符号当前对象在返回数组的索引0选择元素

var QTY = data.Items.filter(function(o) { 
      return o.SKU === "0120-02-01-XP-T-00" 
      })[0]["QTY"]; 

您也可以使用解构赋值

var [, {QTY}] = data.Items; 
0

做一个功能,找到订单项目对于一个给定的SKU:

var findOrderItem = function (order, sku) { 
    if (order && order.Items) { 
    for (var i = 0; i < order.Items.length; i++) { 
     if (order.Items[i].SKU == sku) { 
     return order.Items[i]; 
     } 
    } 
    } 
    return null; 
}; 
var myOrder = { 
    "Order Number": 102541029, 
    "Tracking Number": 192048236154915, 
    "Secondary Tracking": 87350125235, 
    "Items": [ 
    { 
     "SKU": "0200-02-01-NP-P-00", 
     "QTY": 4 
    }, 
    { 
     "SKU": "0120-02-01-XP-T-00", 
     "QTY": 2 
    } 
    ] 
}; 
var sku = "0120-02-01-XP-T-00"; 
var item = findOrderItem(myOrder, sku); 
var qty = 0; 
if (item) { 
    qty = item.QTY; 
} 
console.log("item qty", qty);