2016-12-16 6 views
1

JSON配列を減らそうとしています。配列の内部には他のオブジェクトがあります。属性を独自の配列に変換しようとしています。JSONをJSで減らす

機能を削減:

// parsed.freight.items is path 
    var resultsReduce = parsed.freight.items.reduce(function(prevVal, currVal){ 
     return prevVal += currVal.item 
    },[]) 
    console.log(resultsReduce); 
    // two items from the array 
    // 7205 00000 
    console.log(Array.isArray(resultsReduce)); 
    // false 

軽減機能が働くの一種です。これはitems配列からitemの両方を取得します。しかし、私はいくつかの問題を抱えています。

1)reduceは配列を返しません。私は、関数を作成しようとしています

2)isArrayテストを参照してくださいので、私はでき配列qtyunitsweightpaint_eligableのすべての属性をループ。

var itemAttribute = 'item'; 
    var resultsReduce = parsed.freight.items.reduce(function(prevVal, currVal){ 
     // pass param here so I can loop through 
     // what I actually want to do it create a function and 
     // loop through array of attributes 
     return prevVal += currVal.itemAttribute 
    },[]) 

JSON::事前に

var request = { 
    "operation":"rate_request", 
    "assembled":true, 
    "terms":true, 
    "subtotal":15000.00, 
    "shipping_total":300.00, 
    "taxtotal":20.00, 
    "allocated_credit":20, 
    "accessorials": 
    { 
     "lift_gate_required":true, 
     "residential_delivery":true, 
     "custbodylimited_access":false 
    }, 
    "freight": 
    { 
     "items": 
     // array to reduce 
     [{ 
      "item":"7205", 
      "qty":10, 
      "units":10, 
      "weight":"19.0000", 
      "paint_eligible":false 
     }, 
     { "item":"1111", 
      "qty":10, 
      "units":10, 
      "weight":"19.0000", 
      "paint_eligible":false 
     }], 

     "total_items_count":10, 
     "total_weight":190.0}, 
     "from_data": 
     { 
      "city":"Raleigh", 
      "country":"US", 
      "zip":"27604"}, 
      "to_data": 
      { 
       "city":"Chicago", 
       "country":"US", 
       "zip":"60605" 
      } 
} 

おかげ

+0

としてブラケット表記を使用すると、配列内のアイテムから値のみを取得したいですか?または項目の合計? –

+0

var key = ['item'、 'qty'、 'units'、 'paint_eligible'、 'weight']; var resultsReduce = new Object(); key.forEach(関数(アイテム){ resultsReduce [商品] = parsed.freight.items.reduce(関数(配列オブジェクト){ 戻りarray.concat(オブジェクト[アイテム]); }、[]) ; })これは私が行ったことです。私のメモの投稿だけ – nzaleski

答えて

2

あなたはの配列を取得するためArray#mapを必要とするかもしれない私がしようとすると、ここで

currVal.変数に変数を渡すことはできませんアイテム

var resultsReduce = parsed.freight.items.reduce(function (array, object) { 
    return array.concat(object.item); 
}, []); 

与えられたキーと同じ、property accessor

object.property 
object["property"] 
var key = 'item', 
    resultsReduce = parsed.freight.items.reduce(function (array, object) { 
     return array.concat(object[key]); 
    }, []); 
+0

ありがとう、それは私の最初の問題を解決します。私は 'prev、curr.item'または' prev + curr.item'を使っていましたが、それは私に同じ結果を与えていました。しかし、意味があります。ありがとう! – nzaleski

+0

まだ分かりません、あなたが何を望むか - 配列か単一の数字ですか? –

+1

申し訳ありませんが、配列が必要です。あなたが最初に回答したのは正しいものでした。それは私に '['7205'、 '00000']'を与えます。これはまさに私が望むものです – nzaleski

関連する問題