使用Handlebars获取同级JSON数据,其中单个对象没有父索引键,但多个项有一个索引键
Getting sibling JSON data with Handlebars, where a single object has no parent index key, but multiple items have an index key?
我遇到了一个有趣但令人讨厌的情况,我从API获取了一些数据,这些数据暴露了使用Handlebars等模板语言的缺点。(帮助者,帮助者无处不在!)
是否有一种干净的方法来处理以下情况。从本质上讲,如果一个JSON对象只有一个兄弟对象,那么它就没有用键包装,但如果它返回多个,那么它们就用键包装
因此,下面我们有一个例子,其中的成分有一个兄弟,它在没有包装的情况下返回。第二个对象返回2个成分,因此它们被一个索引键包裹。
我真的对数据的外观无能为力,我只需要能够处理它。
我假设一个助手是可行的,但我希望有一个巧妙的技巧来处理以下情况,以便根据返回的数据来捕捉两者。如果可能的话,我也更喜欢使用纯Handlbar(没有Ember等的帮助)。
如果有人能帮忙,我将不胜感激!
场景1:
"food":{
"ingredient":{
"name":"Cucumber",
"weight":"5",
"cost":"1",
}
}
场景2:
"food":{
"ingredient":{
"1":{
"name":"Cheese",
"weight":"10",
"cost":"2"
},
"2":{
"name":"Tomato",
"weight":"20",
"cost":"0.5"
}
}
}
解决方案:
此packageResponse()
函数将以与您提到的每个场景相同的方式返回ingredient
数据:
/* ===================
SUPPORT FUNCTION(s)
=================== */
function isKeyNumeric(key){
var test = Number(key);
if(isNaN(test))
return false;
return true;
}
/* =============
MAIN FUNCTION
============= */
function packageResponse(ingredient){
var ingredients = {}
var count = 0
for(var i in ingredient){
// Breakpoint in case we get a prototype property
if( !ingredient.hasOwnProperty(i) ) continue;
// Test for what method to use
if( isKeyNumeric(i) ){
// Add the wrapped ingredient
ingredients[count++] = ingredient[i]
}else{
// Add the unwrapped ingredient
ingredients[0] = ingredient
break
}//endifelse
}//endfor
return ingredients
}//endfunction
测试:
/* =========
TEST DATA
========= */
var response_one = {"food":{
"ingredient":{
"name":"Cucumber",
"weight":"5",
"cost":"1",
}
}
}
var response_two = {"food":{
"ingredient":{
"1":{
"name":"Cheese",
"weight":"10",
"cost":"2"
},
"2":{
"name":"Tomato",
"weight":"20",
"cost":"0.5"
}
}
}
}
/* ===========
TEST OUTPUT
=========== */
console.log( packageResponse(response_one.food.ingredient) )
console.log( packageResponse(response_two.food.ingredient) )
输出:
上面的代码生成这个控制台输出:
第一个日志:
0: Object
cost: "1"
name: "Cucumber"
weight: "5"
第二日志
0: Object
cost: "2"
name: "Cheese"
weight: "10"
1: Object
cost: "0.5"
name: "Tomato"
weight: "20"
相关文章:
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 如何在只能有一个asp.net表单的主页上从asp.net页面中的javascript中获取值
- 有可能在来自链接的警报中有一个值吗
- 是否<asp:文本框>有一个onFocusLost事件
- 让谷歌数据图表有一个24小时x轴
- PayPal按钮是否有一个简单的选项,其中金额基于一些用户输入
- 我确实有一个表单,如果用户输入了输入,它应该检查否定或空的输入框,并抛出一条警告消息
- 在这个使用hasOwnProperty的对象扩展程序中有一个错误,I'我不确定那个bug是什么,也不确定这个扩展
- 当知道同一hiearch中至少有一个元素时,遍历到元素.结构使用jquery
- PNG图像被覆盖,但每个图像都有一个链接可以更改,每次一个-Javascript/jQuery/CSS
- JQuery是否有一个“;移动“;作用或者有没有一种更紧凑的方法来做到这一点
- Regex或javascript每X个连续单词中有一个单词
- 获取李有一个类而没有其他类的索引
- 使用Handlebars获取同级JSON数据,其中单个对象没有父索引键,但多个项有一个索引键
- 文档选择中的索引错误,而所选文本有一个点
- 如何在slickgrid中有一个静态索引列
- 如何获得一个数组元素的索引,其中有一个以上的子元素在javascript
- 是否有一个很好的索引/搜索引擎的Node.js
- javascript表单元格不更新,我有一个行索引
- 我有一个IE通知页面,但我怎么能让用户跳过它,并转发回索引