我正在尝试迭代一个不可变列表,并让它返回一个新列表,其中包含以特定字符串开头的任何条目。举个例子,我只是想找出以字母'D‘开头的所有状态--我希望下面的代码返回一个大小为1的列表,并将'Delaware’作为一个条目返回,但返回的是一个空列表。
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>
发布于 2019-02-05 04:54:01
计算机的思想:
阿拉玛巴是从A开始的吗?是的,我会接下去的。阿拉斯加从A开始吗?是的,我会接下去的。亚利桑那州从A开始吗?是的,我会接下去的。阿肯色州从A开始吗?是的,我会接下去的。加州从A开始吗?不,所以我停下来。 阿拉巴马州从D开始吗?不,所以我停下来。
你想要的是filter而不是takeWhile。filter将接受所有满足命题的元素;takeWhile只接受序列开始时的元素。
发布于 2019-02-05 04:56:10
有时候你只需要发邮件就能发现你的错误。我一击中post就意识到,takeWhile一遇到错误就会退出。A's之所以有效,是因为它们是列表的开始。
发布于 2019-03-13 07:13:28
您可以为此使用过滤器
const statesWhichStartWithLetterD = states.filter(state => state.startsWith('D'));
console.log(statesWhichStartWithLetterD.toJS()); // ["Delaware"]https://stackoverflow.com/questions/54527845
复制相似问题