首页 > 解决方案 > 是什么导致此处未定义,我该如何以某种方式将其删除?

问题描述

我已经过滤并减少了数据。然后,我也可以在屏幕上显示它。我只是想知道,是什么导致了undefined这里,我怎样才能删除它,或者我怎样才能让它在屏幕上不可见?

这也在代码框中:https://codesandbox.io/s/filter-sr3ci?file=/src/App.js: 0-2255

这是它在屏幕上显示的内容: 在此处输入图像描述

export default function App() {
  const data = [
    {
      displayName: "Person1",
      "1": { others: "novella", items1: { car: true, motor: true } }
    },
    {
      displayName: "Person2",
      "1": {
        others: "novella",
        items1: { car: true, motor: true, bike: true }
      },
      "2": { items2: { truck: true, bike: true }, others: "wire" }
    },

    {
      displayName: "Person3",
      "1": { others: "book", items1: { car: true, bike: true } },
      "2": {
        others: "wire",
        items2: { bike: true, motor: true, truck: true }
      }
    },

    {
      displayName: "Person4",
      "1": { others: "book", items1: { car: true, bike: true } },
      "2": { others: "", items2: { truck: true, bike: true } }
    },
    {
      displayName: "Person5",
      "1": { others: "novella", items1: { motor: true, car: true } },
      "2": {
        items2: { truck: true, bike: true },
        others: "fan"
      }
    },
    {
      displayName: "Person6",
      "2": {
        items2: { car: true, truck: true, motor: true },
        others: "fan"
      }
    },
    {
      "1": { others: "book", items1: { motor: true, car: true } },
      "2": {
        items2: { car: true, truck: true },
        others: "fan"
      },

      displayName: "Person7"
    }
  ];

  const others1 = data.filter((d) => d["1"]?.others !== "");
  const others2 = data.filter((d) => d["2"]?.others !== "");

  let red = others1.reduce(
    (a, c) => ((a[c["1"]?.others] = (a[c["1"]?.others] || 0) + 1), a),
    {}
  );

  let red2 = others2.reduce(
    (a, c) => ((a[c["2"]?.others] = (a[c["2"]?.others] || 0) + 1), a),
    {}
  );

  // let ar = [];
  // let json = "";
  // for (let [key, value] of Object.entries(red)) {
  //   console.log(key, value);
  //   ar.push(key, value);

  //   json = JSON.stringify(ar);
  // }

  function objToString(obj) {
    let str = "";
    for (const [p, val] of Object.entries(red)) {
      str += `${p}:${val}\n`;
    }
    return str;
  }

  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      {/* {json} */}
      {objToString()}
      <h2>Start editing to see some magic happen!</h2>
    </div>
  );
}

标签: javascriptreactjsjson

解决方案


那么要回答你的问题,你可以简单地这样做来解决你的问题。请注意, p 是一个对象键,它在这里以某种方式变得“未定义”。所以你需要检查它是否有字符串“未定义”。您的实际问题应该是为什么要设置未定义的键

     if (p !== "undefined") {
        str += `${p}:${val}\n`;
      }

推荐阅读