2017-02-13 133 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);