所以我的问题是:如何在angular中扫描JSON以找到isPrimary的第一个实例:true然后使用该项目中的GUID启动一个函数。
我有一个Web服务,JSON定义了具有显示名称和GUID的可用帐户,这会生成一个下拉列表选择列表,该列表调用包含GUID的函数以从Web服务返回完整数据。
在只有1个OPTION的场景中我没有显示SELECT,只是用单个GUID调用该函数来从服务返回数据。如果没有选项我除了消息之外不会显示任何内容。
下面的代码显示了我目前拥有的内容。
Spec现在已经改变,他们在第一个服务调用中发送给我的数据定义了选择列表现在包含一个属性isPrimary:true,其中一个JSON对象及其GUID,其余为
我现在需要将我的界面更改为不再使用SELECT列表,而是激活对包含isPrimary:true属性的项的服务的函数调用。但是可能有多个实例,其中isPrimary:true存在于返回的JSON中,因此我只想在第一个找到的isPrimary实例上触发该函数:true
同样,如果该属性不在任何JSON项中,那么只需在JSON中的第一项上触发该函数。
我目前的代码如下 - 您可以看到从功能中检索完整详细信息的电话:
vm.retrieveAccount(GUID);
每个JSON对象提供GUID的位置
代码是:
if (data.Accounts.length > 1) {
vm.hideAcc = false;
setBusyState(false);
//wait for the user to make a selection
} else if (data.Accounts.length == 1){
vm.hideAcc = true;
// Only 1 acc - no need for drop down get first item
vm.accSelected = data.Accounts[0].UniqueIdentifier;
vm.retrieveAccount(vm.accSelected);
} else {
// Theres no accounts
// Hide Drop down and show message
setBusyState(false);
vm.hideAcc = true;
setMessageState(false, true, "There are no Accounts")
}
新JSON结构示例
accName:“我的Acc”, isPrimary:是的, GUID:“bg111010101”
答案 0 :(得分:0)
仍然认为这是一个奇怪的规范,但很容易解决。只需单步执行数组并返回第一个isPrimary匹配。如果没有找到,则返回数组的第一个元素。
var findPrimary = function(data) {
if (!(Array.isArray(data)) || data.length == 0) {
return false; // not an array, or empty array
}
for (var i=0; i<data.length; i++) {
if (data[i].isPrimary) {
return data[i]; // first isPrimary match
}
}
// nothing had isPrimary, so return the first one:
return data[0];
}