2017-08-21 13 views
0

からのIDに基づいて、アレイからの製品は、私は、アレイこのような一覧他のオブジェクト

[ 
    { 
    "id": "1", 
    "Name": "Name 1", 
    "Price": 10, 
    "inventory": 1, 
    "date_added": 1496757350 
    }, 
    { 
    "id": "2", 
    "Name": "Name 2", 
    "Price": 40, 
    "inventory": 1, 
    "date_added": 1496757290 
    }, 
... 
] 

とオブジェクト

{ 
'1':2, 
'2':15 
'10':5 
} 

を持っています。したがって、最初の商品には商品が含まれ、商品には商品のID(キー)とカートに追加された回数(値)が含まれます。 私が達成したいのは、オブジェクトに基づいて、オブジェクトの別の配列に、基本的に製品をリストすることです。したがって、この場合、そのリストには3つの製品があります。私はここで少し失われています...減らす、フィルターをかける、地図を作る...どうすればいいですか? ありがとうございました

+3

あなたが示した「入力」に基づいて作成したいの正確な出力を表示することができますか? –

答えて

1

あなたはidで貴社の製品のマップを作るためにreduceを使用することができます。

{ 
    id: { /* ... product */ } 
} 

あなたのカート内のIDを反復するObject.keysmapを使用することができます。

Object.keys(cart).map(id => productMap[id]) 

これはカート内のの商品ごとに一度ではなく、の商品リストに1回だけループすることを保証します。

あなたが行った試行を表示すると、あなたの質問からさらに多くのことを得ることができます。 reducemapは何を認識していますか?

const products = [ 
 
    { 
 
    "id": "1", 
 
    "Name": "Name 1", 
 
    "Price": 10, 
 
    "inventory": 1, 
 
    "date_added": 1496757350 
 
    }, 
 
    { 
 
    "id": "2", 
 
    "Name": "Name 2", 
 
    "Price": 40, 
 
    "inventory": 1, 
 
    "date_added": 1496757290 
 
    }, 
 
    { 
 
    "id": "10", 
 
    "Name": "Name 10", 
 
    "Price": 40, 
 
    "inventory": 1, 
 
    "date_added": 1496757290 
 
    } 
 
] 
 

 

 
const cart = { 
 
    "1": 2, 
 
    "2": 15, 
 
    "10": 5 
 
}; 
 

 
const productsById = products 
 
    .reduce((map, prod) => Object.assign(map, { [prod.id]: prod }), {}); 
 
    
 
const list = 
 
    Object 
 
    .keys(cart) 
 
    // Here, you can make any combination you like 
 
    // since both data are retrievable by id 
 
    
 
    // Only products: 
 
    //.map(id => productsById[id]); 
 
    
 
    // Combination 
 
    .map(id => ({ product: productsById[id], quantity: cart[id] })); 
 
     
 
console.log(list);

+0

この後、どの製品にどのように数量を付けることができますか? idsの後のリストはすごくうまくいっています。ちょうど量を何らかの形で添付しなければなりません。 – Legycsapo

+1

最後の 'map'では、' cart'から取得できます。スニペットに追加します。 – user3297291

+0

ありがとうございました!これは今働いている! – Legycsapo

0
let result = products.filter(function(obj) { 
    return (Object.keys(quantityObject).indexOf(obj.id) !== -1); 
}); 

何かそうですか?フィルタは、オブジェクトIDが数量オブジェクトのキー内に存在するかどうかをチェックし、結果に応じて真または偽を返します。

1

商品IDをキーとして使用する別のオブジェクトで使用可能な製品を一覧表示する場合は、 filter

const products = [ 
 
    { 
 
    "id": "1", 
 
    "Name": "Name 1", 
 
    "Price": 10, 
 
    "inventory": 1, 
 
    "date_added": 1496757350 
 
    }, 
 
    { 
 
    "id": "2", 
 
    "Name": "Name 2", 
 
    "Price": 40, 
 
    "inventory": 1, 
 
    "date_added": 1496757290 
 
    }, 
 

 
] 
 

 
const ids = { 
 
'1': 2 
 
} 
 

 
console.log(products.filter(product => product.id in ids))

1

あなたは、製品をフィルタリングし、カートの量で新しい結果セットを構築することができます。

var products = [{ id: "1", Name: "Name 1", Price: 10, inventory: 1, date_added: 1496757350 }, { id: "2", Name: "Name 2", Price: 40, inventory: 1, date_added: 1496757290 }, { id: "4", Name: "Name 4", Price: 30, inventory: 1, date_added: 1496757290 }], 
 
    cart = { 1: 2, 2: 15, 10: 5 }, 
 
    selectedProducts = products.filter(function (o) { return o.id in cart; }); 
 

 

 
console.log(selectedProducts.map(function (o) { 
 
    return ['id', 'Name'].map(function (k) { 
 
     return k + ': ' + o[k]; 
 
    }).concat('count: ' + cart[o.id]).join('; '); 
 
}));

1

あなたは出力オブジェクトを作成し、それが追加された回数に項目を追加することができます。スピード理由

var items = [{ 
 
    "id": "1", 
 
    "Name": "Name 1", 
 
    "Price": 10, 
 
    "inventory": 1, 
 
    "date_added": 1496757350 
 
}, { 
 
    "id": "2", 
 
    "Name": "Name 2", 
 
    "Price": 40, 
 
    "inventory": 1, 
 
    "date_added": 1496757290 
 
}]; 
 

 
var cart = { 
 
    '1': 2, 
 
    '2': 15, 
 
    '10': 5 
 
} 
 

 
var output = {}; 
 

 
for (id in cart) { 
 
    item = items.find(x => x.id === id); 
 
    if (item != null) 
 
    output[id] = { 
 
     item: item, 
 
     count: cart[id] 
 
    }; 
 
} 
 
console.log(output);

1

、配列へのルックアップのetcのために、私は別の連想配列を使用してインデックスの種類を作成する傾向があります。以下のようなもの..

var products = [ 
 
    { 
 
    "id": "1", 
 
    "Name": "Name 1", 
 
    "Price": 10, 
 
    "inventory": 1, 
 
    "date_added": 1496757350 
 
    }, 
 
    { 
 
    "id": "2", 
 
    "Name": "Name 2", 
 
    "Price": 40, 
 
    "inventory": 1, 
 
    "date_added": 1496757290 
 
    } 
 
]; 
 

 
var basket = 
 
{ 
 
    '1':2, 
 
    '2':15 
 
}; 
 

 
//first lets create a kind of index to products.. 
 
var ixProducts = products.reduce((a, v) => { a[v.id] = v; return a; }, {}); 
 

 
Object.keys(basket).forEach((k) => { 
 
    console.log({ 
 
    qty: basket[k], 
 
    product: ixProducts[k] 
 
    }); 
 
});