这里是Json文件
"data" : [
{
"mer" : "a",
"AName" : "Am",
"numProducts" : "69",
"p" : "1.21",
"color" : "#0b4977"
},
{
"mer" : "b",
"AName" : "Ma",
"numProducts" : "42",
"p" : "1.0",
"color" :"#1d94dd"
},
{
"mer" : "c",
"AName" : "An",
"numProducts" : "91",
"p" : "1.01",
"color" :"#09213a"
},
{
"mer" : "d",
"AName" : "A1",
"numProducts" : "91",
"p" : "1.01",
"color" :"#ffcc00"
},
{
"mer" : "egg",
"AName" : "B2",
"numProducts" : "91",
"p" : "1.01",
"color" :"#fcee21"
}
]
}
这里如果需要访问最后一个'mer'值,我会像data [4] .mer那样做,但我想从json文件中访问特殊值,如果它匹配来自同一数据数组的某个条件
例如这里我的最后一个'mer'的值为“egg”,现在我想访问它的特定颜色值。 (#fcee21)我有什么方法可以动态地做到这一点吗?
答案 0 :(得分:1)
你可以创建一个单独的对象,用key作为mer存储你的数据,然后使用函数getColor,它根据提供的键返回你的值。
var temp = {};
for (var i = 0; i < data.length; i++) {
temp[data[i].mer] = data[i];
};
function getColor(key){
return temp[key].color;
}
然后您可以使用getColor,如下所示。
var eggColor = getColor('egg');
答案 1 :(得分:0)
对于一个有点复杂但非常好的解决方案,请参阅JSONiq,它允许很好地操作和提取JSON格式的数据。
否则,对于具有较少开销和拉毛的东西来实现它,请考虑以下任何一种:
答案 2 :(得分:0)
if (data[4].mer == "egg") {
var color = data[4].color;
}
更容易的是循环遍历测试每个索引值的数组,而不是将特定索引与硬编码if语句进行比较。
for (var i = 0; i < data.length; i++) {
if (data[i].mer == "egg") {
var color = data[i].color;
}
}
答案 3 :(得分:0)
你可以像这样使用:
var color = '';
if (data[4].mer == "egg") {
color = data[4].color;
}
答案 4 :(得分:0)
你是说你需要在获得颜色之前找到匹配?然后
//this will work on modern browsers - for IE8 and below, use a shim, for example
//https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
//data is your json object
var matchedObj = data.reduce( function( obj, current ){
if( "egg" === current.mer ){
obj = current;
}
return obj;
}, {});
console.log( matchedObj.color ); //either a string or undefined