打破;没有结束循环

时间:2016-02-28 19:37:51

标签: javascript arrays loops break

所以我有一些我试图解析的JSON数据。 ' id:2'是&like?count'的等效操作ID。出于测试目的,我正在设置" post.actions_summary'于,

post.actions_summary.push({id: 5, count: 2}, {id: 6, count: 2}, {id: 2, count: 10}, {id: 10, count: 10});

代码应该解析通过这个数组如下:

for (i = 0; i < post.actions_summary.length; i++ ) {
  action = post.actions_summary[i];

  if (action.id === 2) {
    aID = action.id;
    aCOUNT = action.count;
    post.actions_summary = [];
    post.actions_summary.push({id: aID, count: aCOUNT});
    break;
  } else {
    post.actions_summary = [];
    post.actions_summary.push({id: 2, count: -1});
  }
}

但是,在检查&post; actions.actions_summary&#39;的值时,我会不断获得一个包含一个元素的数组,其中包含&#39; id:2,count:-1&#39;。我也尝试过使用&#39; .some&#39; (返回false)和&#39; .every&#39; (返回true),但那也不起作用。

post.actions_summary&#39;的正确值。应为{id:2,count:10}。

3 个答案:

答案 0 :(得分:0)

如果我理解得很好,你有一个元素数组,并且你想获得id等于“2”的第一个元素,如果没有id等于“2”的元素你想要初始化你的数组有一个默认元素(值等于“-1”)。

如果我是对的,你的算法会出错:如果你的数组中的第一个元素不等于“2”你用你的默认元素初始化你的数组,无论你的数组大小如何,你'我总是停在第一个元素。

可能的解决方案:

var post = {actions_summary:[]};
post.actions_summary.push({id: 5, count: 2}, {id: 6, count: 2}, {id: 2, count: 10}, {id: 10, count: 10});
var result = []; // bad idea to edit the size of post.actions_summary array during the loop
var found = false

for (var i = 0; i < post.actions_summary.length && !found; i++ ) {
  action = post.actions_summary[i];
  found = action.id === 2;

  if (found) {
    aID = action.id;
    aCOUNT = action.count;
    result.push({id: aID, count: aCOUNT}); 
  }
}

if(!found){
    result.push({id: 2, count: -1});
}

答案 1 :(得分:0)

使用数组filter方法

filtered_actions = post.actions_summary.filter(function(action){
        return action.id == 2
    });

 post.actions_summary = filtered_actions;

答案 2 :(得分:0)

解答:

最后,我使用的代码是:

posts.forEach(function(post) {

  filtered_actions =

  post.actions_summary.filter(function(action){
        return action.id == 2
  });

  if (typeof filtered_actions[0] !== "undefined") {
     post.actions_summary = filtered_actions;
  } else {
     post.actions_summary = [{id: 2, count: 0}];
  }

  });