2017-11-10 18 views
0

混乱のタイトルに申し訳ありません!私は市場のアレイとその内だけで最初の「市場」フィールドにアクセスしようとしています各オブジェクトのオブジェクトの配列にマッピングするときにネストされた配列内の単一のオブジェクトにアクセスする

var listOfProductsToShow = [{ 
    "markets": [{ 
     "date": "2017-10-25", 
     "market": "Tribeca Farmer's Market", 
     "uid": "-KxcWsDKs584lSNbhN1t", 
     }, 
     { 
     "date": "2017-10-31", 
     "market": "Tribeca Farmer's Market", 
     "uid": "-KxcWtWatedeIHOZZ1Dk", 
     }, 
     { 
     "date": "2017-11-04", 
     "market": "Tribeca Farmer's Market", 
     "uid": "-KxcWuWq1c22V2NBh12q", 
     }, 
    ], 
    "price": "9.99", 
    "product": "Chicken Wings", 
    "uid": "-KyRAxDoma3vwKXCiNBU", 
    "unit": "lb", 
    "vendorName": "Bob's Beef", 
    }, 
    { 
    "markets": [{ 
     "date": "2017-10-25", 
     "market": "Tribeca Farmer's Market", 
     "uid": "-KxcWsDKs584lSNbhN1t", 
     }, 
     { 
     "date": "2017-10-31", 
     "market": "Tribeca Farmer's Market", 
     "uid": "-KxcWtWatedeIHOZZ1Dk", 
     }, 
     { 
     "date": "2017-11-04", 
     "market": "Tribeca Farmer's Market", 
     "uid": "-KxcWuWq1c22V2NBh12q", 
     }, 
    ], 
    "price": "9.99", 
    "product": "Burgers", 
    "uid": "-Kyax36Yo0Nr2fm01mgL", 
    "unit": "lb", 
    "vendorName": "Bob's Beef", 
    } 
]; 

これは私が反応にオーバーマッピングしています配列の小さな塊です。私は以下を試しましたが、エラーが発生します。

{listOfProductsToShow.map((product, idx) => (
    product.markets[0].market 
))} 

これを行う方法はありますか?私は市場の配列にマップすることができますが、私は最初の市場の名前が欲しいだけです。助けをあらかじめありがとう!

+1

こと。それはあなたにエラーを与えると言いましたか?具体的にはどのエラーですか? – CRice

+0

未定義はオブジェクトではありません( 'product.markets [0] .market'を評価しています) – livehappydrinkcoffee

+0

データの整合性は? 「市場」は常に配列ですか?その配列は空ではないですか? – Damon

答えて

0

おそらくmarkets配列が空であり、undefined is not an objectエラーが発生することがあります。その存在を最初にチェックし、存在しなければundefinedを返すことで、この問題を回避できます。そして、最後に、すべての未定義の値をフィルタリング:最後のスニペットは私に権利についての見える

var myArray = [ 
 
    { 
 
    "markets": [ 
 
     { 
 
     "date": "2017-10-25", 
 
     "market": "Tribeca Farmer's Market", 
 
     "uid": "-KxcWsDKs584lSNbhN1t", 
 
     }, 
 
     { 
 
     "date": "2017-10-31", 
 
     "market": "Tribeca Farmer's Market", 
 
     "uid": "-KxcWtWatedeIHOZZ1Dk", 
 
     }, 
 
     { 
 
     "date": "2017-11-04", 
 
     "market": "Tribeca Farmer's Market", 
 
     "uid": "-KxcWuWq1c22V2NBh12q", 
 
     }, 
 
    ], 
 
    "price": "9.99", 
 
    "product": "Chicken Wings", 
 
    "uid": "-KyRAxDoma3vwKXCiNBU", 
 
    "unit": "lb", 
 
    "vendorName": "Bob's Beef", 
 
    }, 
 
    { 
 
    "markets": [ 
 
     { 
 
     "date": "2017-10-25", 
 
     "market": "Tribeca Farmer's Market", 
 
     "uid": "-KxcWsDKs584lSNbhN1t", 
 
     }, 
 
     { 
 
     "date": "2017-10-31", 
 
     "market": "Tribeca Farmer's Market", 
 
     "uid": "-KxcWtWatedeIHOZZ1Dk", 
 
     }, 
 
     { 
 
     "date": "2017-11-04", 
 
     "market": "Tribeca Farmer's Market", 
 
     "uid": "-KxcWuWq1c22V2NBh12q", 
 
     }, 
 
    ], 
 
    "price": "9.99", 
 
    "product": "Burgers", 
 
    "uid": "-Kyax36Yo0Nr2fm01mgL", 
 
    "unit": "lb", 
 
    "vendorName": "Bob's Beef", 
 
    }, 
 
    { 
 
    "markets": [] 
 
    } 
 
]; 
 

 
console.log(myArray) 
 

 
var result = myArray.map(x => x.markets[0] && x.markets[0].market).filter(Boolean) 
 
console.log(result)

0
let array = [ 
{ 
    "markets": [ 
    { 
     "date": "2017-10-25", 
     "market": "Tribeca Farmer's Market", 
     "uid": "-KxcWsDKs584lSNbhN1t", 
    }, 
    { 
     "date": "2017-10-31", 
     "market": "Tribeca Farmer's Market", 
     "uid": "-KxcWtWatedeIHOZZ1Dk", 
    }, 
    { 
     "date": "2017-11-04", 
     "market": "Tribeca Farmer's Market", 
     "uid": "-KxcWuWq1c22V2NBh12q", 
    }, 
    ], 
    "price": "9.99", 
    "product": "Chicken Wings", 
    "uid": "-KyRAxDoma3vwKXCiNBU", 
    "unit": "lb", 
    "vendorName": "Bob's Beef", 
}, 
{ 
    "markets": [ 
    { 
     "date": "2017-10-25", 
     "market": "Tribeca1 Farmer's Market", 
     "uid": "-KxcWsDKs584lSNbhN1t", 
    }, 
    { 
     "date": "2017-10-31", 
     "market": "Tribeca Farmer's Market", 
     "uid": "-KxcWtWatedeIHOZZ1Dk", 
    }, 
    { 
     "date": "2017-11-04", 
     "market": "Tribeca Farmer's Market", 
     "uid": "-KxcWuWq1c22V2NBh12q", 
    }, 
    ], 
    "price": "9.99", 
    "product": "Burgers", 
    "uid": "-Kyax36Yo0Nr2fm01mgL", 
    "unit": "lb", 
    "vendorName": "Bob's Beef", 
}, 
]; 

let values = Object.values(array) 
       .map(item => { return item.markets }) 
       .map(arrayIndexItem => arrayIndexItem.map(item2 => item2.market)) 
       .map(it => it[0]); 
console.log(values); 
+0

これはあなたが好きなのかわからない1つの実装です。 –

+0

[["2017-10-25"、 "2017-10-31"、 "2017-11-04"]、 ["2017-10-25"、 "2017-10-31"、 "2017-10-31" 11-04 "] ] –

+0

ああ、あなたは市場の名前が欲しい。私の悪い、私はそこから私の実装と簡単なオブジェクトのアクセスに基づいてそれを得たと思います –

関連する問題