使用Set比较数组中的唯一项

时间:2017-01-06 16:30:09

标签: javascript set

编辑: faintsignal下面提供的链接是最适用的答案。它不仅解释了为什么会出现这种情况,而且还能解决所述问题。

我有一个数组,我想确定所有元素是否等于单个值。以下代码似乎应该可行,但它并没有。谁能解释一下?

<link href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css" rel="stylesheet" />
<link href="https://code.getmdl.io/1.3.0/material.indigo-pink.min.css" rel="stylesheet" />

<script src="https://code.getmdl.io/1.3.0/material.min.js"></script>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

<section>
  <div class="mdl-card">
    <button class="mdl-button mdl-js-button">Close</button>
  </div>
  <p>
    Content to test the height of the div above
  </p>
</section>

欢迎提供任何信息!

1 个答案:

答案 0 :(得分:1)

检查集合的大小是否为1:

const initialState = { 
  activePost: { post: null, error: null, loading: false },
};

export default function(state = initialState, action) {
  let error;

  switch (action.type) {
    case UPDATE_POST: {
      return { ...state, activePost: { ...state.post, loading: true, error: null } };
    }

    case UPDATE_POST_SUCCESS: {
      return { ...state, activePost: { post: action.payload, loading: false, error: null } };
    }

    case UPDATE_POST_FAILURE: {
      error = action.payload || { message: action.payload.message };

      return { ...state, activePost: { ...state.activePost, loading: false, error: error } };
    }
  }
}

正如其他答案/评论已经提到的那样,

new Set(array2).size === 1

返回false,因为不同的对象不相等。

理论上,您可以使用注释中提到的问题中的技术检查new Set(array2) == new Set(['foo']) new Set(array2)的等效性,但是您不需要这样做,因为检查大小是否为1完全符合你的需要。