2017-12-05 4 views
1
const data = { 
    "orders" : [ 
    { "items" : {"count":3} }, 
    { "items" : {"count":1} }, 
    { "items" : {"count":2} } 
    ] 
} 
let total = 0 
data.orders.map((order) => order.items.map((item) => (total += item.count))) 
console.log(total) 

私はconsole.log(someoperation(data))と言うより巧妙な方法がありますか?入れ子になったプロパティを巧みに追加するには?

+0

あなたは[ 'アレイ#reduce'](httpsを使用できるオブジェクトを持つ単一の呼び出しのための

機能://開発者を。 mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce) – Barmar

+1

'order.items'はありません。配列を '.map() 'することはできません。 – Barmar

答えて

4

あなたが作品を持っていますが、あなたはまた、配列.reduceメソッドを使用することができますどのような:

const data = { 
 
    "orders" : [ 
 
    { "items" : {"count":3} }, 
 
    { "items" : {"count":1} }, 
 
    { "items" : {"count":2} } 
 
    ] 
 
} 
 

 
const total = data.orders.reduce((cnt, item) => { return cnt+item.items.count; }, 0) 
 

 
console.log(total)

EDIT:あなたはlodashを持っている場合

また、これはさらに簡単です:

const total = _.sumBy(data.orders, x => x.items.count); // evaluates to 6 
0

ju STはのparamsと機能でそれをラップ:

function getTotal(startVal) { 
    var total = startVal; 
    data.orders.map((order) => order.items.map((item) => (total += item.count))) 
    const data = { 
    "orders" : [ 
     { "items" : {"count":3} }, 
     { "items" : {"count":1} }, 
     { "items" : {"count":2} } 
    ] 
    } 
    return total; 
} 

console.log(getTotals(0)); 
+3

関数はグローバル変数名をハードコードするのではなく、引数をとる必要があります。 – Barmar

2

あなたはカウントの値のために、ネストされたdestructuring assignmentを使用することができます。

var data = { orders: [{ items: { count: 3 } }, { items: { count: 1 } }, { items: { count: 2 } }] }, 
 
    total = data.orders.reduce((s, { items: { count } }) => s + count, 0); 
 

 
console.log(total);

const getCount = ({ orders }) => orders.reduce((s, { items: { count } }) => s + count, 0); 
 

 
var data = { orders: [{ items: { count: 3 } }, { items: { count: 1 } }, { items: { count: 2 } }] }; 
 

 
console.log(getCount(data));

関連する問題