2016-05-16 72 views
1

我有这样一个对象,以便:搜索对象的相关数据

var products = {"products":[ 
    {"productID":"32652", "name":"Playstation 4", "price":"109.99"}, 
    {"productID":"24164", "name":"Xbox", "price":"129.99"} 
]}; 

我需要与可变productID搜索和查找相关nameprice

我搜索刚领着我偏离轨道像.closest这是为DOM不为一个对象。

如何搜索productID var的对象并查找关联的数据?

+1

可能的复制[在JavaScript对象数组查找属性值的对象(http://stackoverflow.com/questions/7364150/find-an-object-by-property-value-in-an-array-of-javascript-objects) –

回答

1

您可以使用array.find

var foundProduct = products.products.find(x => x.productId === "12345") 
if (foundProduct) { // foundProduct can be undefined. 
    var foundName = foundProduct.name 
    var foundPrice = foundProduct.price 
} else { /* handle not found */ } 

如果你在不支持Array.find的是,你可以改用.filter这是较为普遍实施的情况下。

var foundProduct = products.products.filter(x => x.productId === "12345")[0] 
if (foundProduct) { // foundProduct can be undefined. 
    var foundName = foundProduct.name 
    var foundPrice = foundProduct.price 
} else { /* handle not found */ } 
1

您可以使用Array.prototype.filter()

var result = products.products.filter(function(obj) { 
    return obj.name == "Xbox"; 
})[0]; 

注意.filter将返回数组。如果你只需要第一场比赛,那么这将适合你。如果你需要所有的结果的话,只是删除的[0]

+1

很好的解决方案给你 –

+0

嘿,我有点困惑这个答案,因为你已经硬编码“Xbox”到位。我正在试图找出那些数据,那么我怎样才能将它硬编码到函数中呢? – user1486133

+0

@ user1486133硬编码的“Xbox”可以是您想要的任何变量。它可以是任何事情,只是它的一个例子 – Akis

0
var products = {"products":[ 
    {"productID":"32652", "name":"Playstation 4", "price":"109.99"}, 
    {"productID":"24164", "name":"Xbox", "price":"129.99"} 
]}; 

function findProduct(product) { 
    return product.productID === '24164'; 
} 

console.log(products.products.find(findProduct)); //{productID: "24164", name: "Xbox", price: "129.99"} 
+0

find方法为数组中存在的每个元素执行一次回调函数(findProduct),直到找到回调函数返回真值的地方为止。 如果找到这样的元素,find立即返回该元素的值。否则,查找返回未定义。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find –

0
console.log(products.products.find(function(p) {return p.productID === '24164'}));