我有问题,请你帮我! 我有一个json数组:
"category" : [
{
id: 1,
product: [{id : product_1, type : ball}]
},
{
id : 2,
product :[{id : product_2, type : pen}]
}
]
我的问题是:如果我有一个链接,例如:http://test/category/1那么,我怎样才能按ID = 1的类别获取产品信息? 感谢您的任何建议:)
答案 0 :(得分:9)
假设您的数据结构如下所示:
var data = {
"category" : [
{
id: 1,
product: [{id : product_1, type : ball}]
},
{
id : 2,
product :[{id : product_2, type : pen}]
}
]
}
然后,你可以通过搜索数组来找到id == 1的类别数组中的项目:
function findId(data, idToLookFor) {
var categoryArray = data.category;
for (var i = 0; i < categoryArray.length; i++) {
if (categoryArray[i].id == idToLookFor) {
return(categoryArray[i].product);
}
}
}
var item = findId(data, 1);
// item.id, item.type
答案 1 :(得分:6)
这是一种在一行中完成而不使用for:
的方法function filterById(jsonObject, id) {return jsonObject.filter(function(jsonObject) {return (jsonObject['id'] == id);})[0];}
然后,如果你想获得id = 2的对象,你只需使用:
var selectedObject = filterById(yourJson['category'], 2);
然后,根据您的示例,selectedObject将获得此值:
{
id : 2,
product :[{id : product_2, type : pen}]
}
有一个缺点:旧的浏览器,如IE8,不支持filter(),所以你需要添加这个polyfill代码以获得旧的浏览器兼容性: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter#Polyfill
答案 2 :(得分:2)
如果在categories
JS变量中保存类别数组,则可以基于简单的JavaScript(没有jQuery)过滤此数组:
var result = categories.filter(function(element){
if (element.id == 2){
return true;
} else {
return false;
}
});
然后在result[0].product
中,您将拥有特定类别的产品数组。
请参阅this jsfiddle以获取证明。
PS。 filter()
方法并非在所有浏览器中都可用,您可能需要应用一些代码,以便在需要时找不到它们。以下是有关filter()
详细信息以及使其适用于旧浏览器所需的代码的Mozilla开发人员网络上的一些文章:MDN: filter()
。
答案 3 :(得分:0)
我认为OP希望从网址中检索相应的数据。
所以第一步是将网址映射到标识符
var urlParts = window.location.href.split(/\//)
//window.location.href = http://domain.com/category/1
// urlParts = ['http:', '', 'domain.com', 'category', '1']
var id = urlParts.pop();
var category = urlParts.pop();
然后使用JSON.parse
:
var data = JSON.parse('{"category" : [{"id": 1, "product": [{"id" : "product_1", "type" : "ball"}] }, {"id" : 2, "product" :[{"id" : "product_2", "type" : "pen"}] } ]}');
//The data structure
// {"category" : [
// {"id": 1, "product" :
// [
// {"id" : "product_1", "type" : "ball"}
// ]},
// {"id" : 2, "product" :
// [
// {"id" : "product_2", "type" : "pen"}
// ]}
// ]}
最后,您可以使用id
和category
function findId(data, idToLookFor) {
var categoryArray = data.category;
for (var i = 0; i < categoryArray.length; i++) {
if (categoryArray[i].id == idToLookFor) {
return(categoryArray[i].product);
}
}
}
var item = findId(data.category, id);
// item.id, item.type
答案 4 :(得分:0)
您可能已找到答案,但如果还没有,则只需使用逻辑 OR (||
)运算符。
在您的情况下,您可以使用jQuery的ajax()
方法。要根据id
获取您的产品,只需使用以下简单逻辑:
var prodID1 = 1, prodID2 = 2;
if(this.id == prodID || this.id == prodID2) {
//write your JSON data, etc.
//push to array, etc.
}
答案 5 :(得分:0)
我在获取JSON列表时添加了一个动态ID,并且此ID存储在本地存储中,然后在匹配本地存储ID和列表ID之后
解决方案:
editRec(row) {
var NewMsg = JSON.parse(localStorage.getItem('id'));
for (var i = 0; i < row.length; i++) {
if (row[i].id == NewMsg) {
let body = {
msg: row[i].msg = this.SendMsg.value.msg,
}
row[i].msg = body.msg;
}
}
}