【问题标题】:converting txt into an array of values将txt转换为值数组
【发布时间】:2021-03-30 11:35:11
【问题描述】:

我是 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:无法读取属性‘split’ of null”。英语不是我的母语,如有错误请见谅

我正在获取的数据:

这就是我想要实现的目标:

我的代码:

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;

【问题讨论】:

    标签: javascript html reactjs dictionary react-hooks


    【解决方案1】:

    试试这个算法:

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

    【讨论】:

    • 出现错误:TypeError: Cannot read property 'split' of null
    • 尝试\n\t进行第一次拆分
    • 你的意思是2个拆分?,你可以把代码放在这里,当我接受它时,把它作为问题
    • 不工作我应该有 'propertyK','propertyv' 吗?
    • 控制台记录获取数据的结果和DataArr。不,你不应该
    【解决方案2】:

    您收到错误是因为最初的数据设置为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 变量。

    【讨论】:

    • 我现在得到:[未定义,“06↵1”]
    • 为什么未定义以及为什么这个'↵'?
    • 如果不查看data 中的内容,很难回答这个问题。
    • 我在问题中添加的图片是我的数据示例
    • 你能把数据记录下来并粘贴到这里让我弄清楚吗?
    【解决方案3】:

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

    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

    【讨论】:

      猜你喜欢
      • 2017-04-14
      • 2011-04-27
      • 2021-06-19
      • 2016-10-18
      • 2011-08-28
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多