array.map之后的未定义值-react.js

时间:2018-07-12 11:30:47

标签: javascript arrays reactjs function

我的函数遇到了问题,该函数没有返回值并使它不确定,但仍然可以找到适当的值,但会“丢失”。 我正在做的事情是通过深度嵌套的数组,并寻找我想通过parentId添加的元素的父级。

    const data = [
    { id: '1', parentId: null, title: 'Hi'},
    [
        { id: '2', parentId: '1', title: 'Hello'},
        { id: '3', parentId: '2', title: 'Morning'},
        [
            { id: '5', parentId: '2', title: 'Bye'},
            { id: '6', parentId: '3', title: 'Hey'},
        ]
    ]
]

这是我用来查找父项的函数:

 findParent(value, data) {
  return new Promise((resolve, reject) => {
    let parent;
    data.map(child => {
      if (isArray(child)) {
        return findParent(value, child);
      } else {
        if (child.id === value.parentId) {
          return parent = child;
        }
      }
    })

    if (parent !== undefined) {
      resolve(parent)
    } else {
      reject(Error('Parent is undefined'))
    }
  });
}

传递的值类似于数据的一部分{id:'2',parentId:'1',title:'Hello'}。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以创建一个同步函数来查找父级,然后再创建另一个函数来调用父级并返回承诺。

示例

const data = [
  { id: "1", parentId: null, title: "Hi" },
  [
    { id: "2", parentId: "1", title: "Hello" },
    { id: "3", parentId: "2", title: "Morning" },
    [
      { id: "5", parentId: "2", title: "Bye" },
      { id: "6", parentId: "3", title: "Hey" }
    ]
  ]
];

const value = data[1][2][1];

function findParentInner(value, data) {
  for (let i = 0; i < data.length; i++) {
    const d = data[i];

    if (Array.isArray(d)) {
      return findParentInner(value, d);
    } else if (d.id === value.parentId) {
      return d;
    }
  }

  return null;
}

function findParent(value, data) {
  return new Promise((resolve, reject) => {
    const parent = findParentInner(value, data);

    if (parent) {
      resolve(parent);
    } else {
      reject("Parent was not found");
    }
  });
}

console.log(value);
findParent(value, data).then(console.log);