2011-03-16 50 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" 
相關問題