将 txt 转换为值数组

时间:2020-12-20 13:20:12

标签: javascript html reactjs dictionary react-hooks

我是 React.js 的新手(使用钩子)并且想通过简单地做我自己的项目(编码)来学习,我的问题是我想从 ksngfr.com/something.txt 和数据中获取数据我从那里得到的是“2005-07-09 03:05 1:74539 2:29735 3:95426 4:35489 ...”,它是“.txt”,我想将它们放入这样的数组中:[“74539”,“29735”,“95426”,“35489”],正如你所看到的,我不想把它放在数组“2005-07-09 03:05”中,我已经从互联网上查看并提出有解决方案,但收到错误消息“TypeError:无法读取 null 的属性 'split'”。英语不是我的母语,如有错误请见谅

我正在获取的数据:

enter image description here

这就是我想要实现的:

enter image description here

我的代码:

function App() {
  const [data, setData] = useState(null);
  var daattaa, k;
  const obj = {};
  useEffect(() => {
    const fetchData = async () => {
      let corsAnywhere = "https://cors-anywhere.herokuapp.com/";
      let something = "http://ksngfr.com/something.txt";
      await fetch(corsAnywhere + something)
        .then((response) => response.text())
        .then((result) => {
          setData(result);
        });
    };
    fetchData();
  }, []);
  daattaa = data.split(" ");

  daattaa.forEach((d) => {
    var propertyK = d.split(":")[0];
    var propertyv = d.split(":")[1];
    obj[propertyK] = propertyv;
  });
  k = Object.values(obj);

  console.log(k);
  return (
    <div className="App">
      {k.map((content) => (
        <h1>{content}</h1>
      ))}
    </div>
  );
}

export default App;

3 个答案:

答案 0 :(得分:0)

试试这个算法:

const theDataArr = data.split('\n\r');
const nums = theDataArr.map((cur, index) => {
  if (index === 0)
    return undefined;
  return cur.split(':')[1];
});

答案 1 :(得分:0)

您收到错误是因为最初的数据设置为 null 并且当您的实际数据被获取并在后台设置时,daattaa = data.split(" ")(作为 null.split(" "))将得到执行。
改变 daattaa = data.split(" ");daattaa = data ? data.split(" ") : []; 应该可以工作。

您也可以使用 const [data, setData] = useState([]);and 并根据结果设置格式化数组

useEffect(() => {
const fetchData = async () => {
  let corsAnywhere = "https://cors-anywhere.herokuapp.com/";
  let something = "http://ksngfr.com/something.txt";
  await fetch(corsAnywhere + something)
    .then((response) => response.text())
    .then((result) => {
      setData(result.split(" "));
    });
  };
 fetchData();
}, []);

然后您根本不需要 daattaa 变量。

答案 2 :(得分:0)

你可以在正则表达式的帮助下做这样的事情:

var input = "2005-07-09 03:05 1:74539 2:29735 3:95426 4:35489";
var arr = input.split(" ");
var regex = /[\w:]+(?=;|$)/;

arr.forEach((text, i) => {
  if (i > 1) {
    var curText = regex.exec(text).toString();
    alert(curText.split(':')[1]);
  }
});

https://codesandbox.io/s/focused-shannon-c3y37?file=/src/index.js

相关问题