2011-03-16 19 views
1

我有一个功能叫uncompletedSteps()我该如何实现一个函数来查找数组非真元素的索引?

function uncompletedSteps(completedSteps) { 
    // completedSteps is an array 
} 

这个功能应该检查completedSteps并返回不等于true所有completedSteps元素的索引:

if (completedSteps[i] === true) { 
    // add to return list 
} 

换句话说,如果有:

var completedSteps = [ 
    true, 
    null, 
    true 
]; 

然后uncompletedSteps()手ld返回[0, 2]

uncompletedSteps()应该是什么样子? (ECMAScript5没关系)

回答

4

使用reduce

function uncompletedSteps(steps){ 
    return steps.reduce(function(memo, entry, i) { 
     return memo.concat(entry ? i : []); 
    }, []) 
} 

使用forEach

function uncompletedSteps(steps){ 
    var uncompleted = []; 
    steps.forEach(function(entry,i) { 
     if(entry) uncompleted.push(i); 
    }) 
    return uncompleted; 
} 

使用mapfilter

function uncompletedSteps(steps){ 
    return steps.map(function(entry, i) { 
     return entry ? i : null; 
    }).filter(function(entry) { 
     return entry != null; 
    }); 
} 
1
var count = []; 
for (var i = 0; i<completedSteps.length; i++) { 
    if(completedSteps[i]) { 
    count.push(i); 
    } 
} 
return count; 
+0

我其实已经实现了这个。我的问题是,是否有一个更简洁的方法来做到这一点。 – PostgresQLNewb 2011-03-16 21:35:13

0
var arr = [true, true, null, true]; 
arr.map(function(el, i) { 
    return el ? i : -1; 
}).filter(function(el) { 
    return el != -1; 
}) 

返回:

[0, 1, 3] 
0

这个功能应该检查completedSteps并返回不等于真正的全completedSteps元素的索引:

使用的向后兼容性以下过程:

  • 多个替换插入字符串null为值converted to empty strings
  • 一个replace以除去true
  • 另一replace与代用品回调插入索引
  • 另一个replace以除去领先逗号
  • 另一个replace以除去成对的逗号

例如:

function foo(match, offset, fullstring) 
    { 
    foo.i = foo.i + 1 || 0; 
    if (match === "true") 
    { 
    return ""; 
    } 
    else 
    { 
    return foo.i; 
    } 
    } 

function uncompletedSteps(node) 
    { 
    return String(node).replace(/^,/ , "null,").replace(/,$/ , ",null").replace(/,,/g , ",null,").replace(/[^,]+/g, foo).replace(/^,/,"").replace(/,,/g,",") 
    } 

var completedSteps = [ 
    null, 
    true, 
    false, 
    true, 
    null, 
    false, 
    true, 
    null 
]; 

uncompletedSteps(completedSteps); // "0,2,4,5,7" 
相关问题