我正在尝试遍历不可变列表,并使其返回带有以特定字符串开头的所有条目的新列表。对于此处的示例,我只是想查找所有以字母“ 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>
答案 0 :(得分:2)
计算机的思想:
阿拉马巴是否以A开头?是;我接受它并继续。 阿拉斯加是否以A开头?是;我接受它并继续。 亚利桑那州是否以A开头?是;我接受它并继续。 阿肯色州是否以A开头?是;我接受它并继续。 加利福尼亚以A开头吗?不,我停下来。
阿拉巴马州是否以D开头?不,我停下来。
您想要filter
,而不是takeWhile
。 filter
将包含所有满足命题的元素; takeWhile
仅适用于序列开头的内容。
答案 1 :(得分:2)
有时候,您只需要发布帖子以查找错误。我意识到,只要我碰到了takeWhile,就会在遇到错误时立即退出。 A在起作用,因为它们是列表的开头。
答案 2 :(得分:1)
您可以为此使用filter
const statesWhichStartWithLetterD = states.filter(state => state.startsWith('D'));
console.log(statesWhichStartWithLetterD.toJS()); // ["Delaware"]