如何创建 { 0: false, 1: false, 2: false, ..., 99: false } JavaScript 中的最短路径(最好使用 Lodash?)

How to create { 0: false, 1: false, 2: false, ..., 99: false } the shortest way in JavaScript (preferably using Lodash?)

问题在标题里。我想制作一个 object,它具有从 0 到 99 的所有键,所有值都应该是 false

我可以用几行代码在 JavaScript ES6 中弄清楚如何做到这一点,但想知道是否有人能想到 one-line 解决方案?我尝试了不同的 lodash 方法,例如 keyBymap,但到目前为止都没有成功。

像这样简单:

const obj = {};

for (let i = 0; i < 100; i++) {
  obj[i] = false;
}

console.log(obj);

另一行是:

Object.assign({}, new Array(100).fill(false));

我们在哪里

  • Create 一个数组:new Array(length)
  • Fill 它与 false: fill(false)
  • Convert to an object: Object.assign({}, ...);

const obj = Object.assign({}, new Array(100).fill(false));
console.log(obj);

根据我的评论,我认为您应该使用数组。只需拿起 rowIndex,复制现有数组,更新索引处的值,然后更新状态。

const { useEffect, useState } = React;

function Example() {

  const [ data, setData ] = useState(new Array(5).fill(false));

  function handleClick(e) {
    const index = e.target.parentNode.rowIndex;
    const newArray = [...data];
    newArray[index] = !newArray[index];
    setData(newArray);
  }

  useEffect(() => {
    console.log(data);
  }, [data]);

  return (
    <div>
      <table onClick={handleClick}>
        <tbody>
          <tr><td>Bob</td><td>25</td></tr>
          <tr><td>Karen</td><td>26</td></tr>
          <tr><td>Dave</td><td>27</td></tr>
          <tr><td>Jo</td><td>35</td></tr>
          <tr><td>Steve</td><td>75</td></tr>
        </tbody>
      </table>
    </div>
  );
};

// Render it
ReactDOM.render(
  <Example />,
  document.getElementById("react")
);
tr { background-color: #efefef; }
tr:hover { cursor: pointer; background-color: #bfbfbf; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>
<div id="react"></div>