StartsWith()无法与takeWhile()一起使用

时间:2019-02-05 04:52:10

标签: javascript string immutable.js startswith

我正在尝试遍历不可变列表,并使其返回带有以特定字符串开头的所有条目的新列表。对于此处的示例,我只是想查找所有以字母“ D”开头的状态,我希望下面的代码返回一个大小为1的列表,并以“特拉华州”作为条目,但返回列表为空。

const states = Immutable.fromJS([
    "Alabama",
    "Alaska",
    "Arizona",
    "Arkansas",
    "California",
    "Colorado",
    "Connecticut",
    "Delaware"]);
    
function filter() {
  const testA = 'A';
  const filteredOptions = states.takeWhile((option) =>  option.startsWith(testA));
  console.error(filteredOptions.size); // is 4 as I would expect
  
  const testD = 'D';
  const filteredOptions2 = states.takeWhile((option) =>  option.startsWith(testD));
  console.error(filteredOptions2.size); // is 0 when I expect 1
};

filter();
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

3 个答案:

答案 0 :(得分:2)

计算机的思想:

  

阿拉马巴是否以A开头?是;我接受它并继续。   阿拉斯加是否以A开头?是;我接受它并继续。   亚利桑那州是否以A开头?是;我接受它并继续。   阿肯色州是否以A开头?是;我接受它并继续。   加利福尼亚以A开头吗?不,我停下来。

     

阿拉巴马州是否以D开头?不,我停下来。

您想要filter,而不是takeWhilefilter将包含所有满足命题的元素; takeWhile仅适用于序列开头的内容。

答案 1 :(得分:2)

有时候,您只需要发布帖子以查找错误。我意识到,只要我碰到了takeWhile,就会在遇到错误时立即退出。 A在起作用,因为它们是列表的开头。

答案 2 :(得分:1)

您可以为此使用filter

const statesWhichStartWithLetterD = states.filter(state => state.startsWith('D'));
console.log(statesWhichStartWithLetterD.toJS()); // ["Delaware"]