2017-02-27 40 views
0

我有这样的JSONStringBuilder的for循环

{ 
    "elements": [{ 
      "company": "Microsoft", 
      "isValid": "yes" 
     }, { 
      "company": "Google", 
      "isValid": "no" 
     }, { 
      "company": "Apple", 
      "isValid": "yes" 
     } 
    ] 
} 

而且我想建立一个字符串输出,这样

Microsoft is OK 

Google is NOT OK 

Apple is OK 

如果参考isValid = YES,那么它就是“也不行”。否则是 'OK'

这里我的代码

for (i in result) { 
var output = new StringBuilder(); 
if (result[i].isValid == "yes") { 
    output.append(result[i].company); 
    output.append(" is OK\n"); 
    } else { 
     output.append(result[i].company); 
    output.append(" is NOT OK\n"); 
    } 
} 
console.log(output.toString()); 

但产量只有最后一个(苹果OK);

请帮助

回答

4

StringBuilder otside的for循环。
每次进入循环时,您的代码都会生成新的StringBuilder

var output = new StringBuilder(); 
for (i in result) { 
    if (result[i].isValid == "yes") { 
    output.append(result[i].company); 
    output.append(" is OK\n"); 
    } else { 
    output.append(result[i].company); 
    output.append(" is NOT OK\n"); 
    } 
} 
console.log(output.toString()); 
0

这是因为console.log(output.toString());超出的for循环,所以这将最新的output执行(“苹果是确定”,在这种情况下)。将console.log(output.toString());放在for循环中(如下面的代码片段所示)将为所有值elements提供输出。

for (i in result) { 
var output = new StringBuilder(); 
if (result[i].isValid == "yes") { 
    output.append(result[i].company); 
    output.append(" is OK\n"); 
    } else { 
     output.append(result[i].company); 
    output.append(" is NOT OK\n"); 
    } 
console.log(output.toString()); 
} 
+0

效率不高,因为每次进入循环时都必须创建新的StringBuilder。 – Lapacho

+0

是的!你的答案更优化。 –