在JavaScript中终止外部地图功能

时间:2015-01-03 12:24:42

标签: javascript jquery

我想在if条件通过时终止map函数

dataset.Categories.map(function (item) {
    if(Object.keys(item)[0] == current_category){
        return false;  
    }
    else
        category_position++;
});

这里数据集是一个对象。即使条件通过,map函数也会运行整个长度。

2 个答案:

答案 0 :(得分:4)

看起来你真的想用Array.prototype.some

dataset.Categories.some(function (item) {
    if (Object.keys(item)[0] == current_category) {
        return true; // this will end the `some`
    }
    ++category_position;
});

此外,您的测试可能更好地以

形式编写
if (item.hasOwnProperty(current_category)) { // etc

因为这可以避免涉及 Object

上的键多次序的问题

答案 1 :(得分:1)

在你的实际问题之前的事情:

  • 由于您没有创建新阵列,因此可能需要使用forEach()
  • 我无法记得看到有关这些迭代器函数的任何信息,这些函数保证了处理元素的顺序。

有人说修复你的代码,我会向shortcircuit引入一个变量(因为afaik那些迭代器函数无法取消):

var done = false,
    category_position = 0;
dataset.Categories.map(function (item) {
  if( done ) {
    return;
  } 

  if(Object.keys(item)[0] == current_category){
    done = true 
  } else {
    category_position += 1;
  }
});

除此之外,我认为,仅仅for循环对你来说最合适:

var category_position;
for( category_position=0; category_position<dataset.Categories.length; category_position++ ) {
  if(Object.keys(dataset.Categories[ category_position ])[0] == current_category){
    break;
  } 
}