例如,如果我们有一个现有的对象

const mainObject = {
  title: 'some title',
  topics: {
    topic1: {
      path: '',
      id: 1
    },
    topic2: {
      path: '',
      id: 2
    }
  }
}


我有一个函数来获取包含键的数组
例如

const arrayOfKeys = ['topics', 'topic1'];

function getObjectByKeys(arrayOfKeys) {
  // problem is length of the array may change
  const myObject = mainObject[arrayOfKeys[0]][arrayOfKeys[1]];
  return myObject;
}


函数应该返回

{
      path: '',
      id: 1
}

最佳答案

您可以在此处使用.reduce。用主对象初始化累加器,并在其回调的每次迭代中返回与当前键对应的值。



const mainObject = {
  title: 'some title',
  topics: {
    topic1: {
      path: '',
      id: 1
    },
    topic2: {
      path: '',
      id: 2
    }
  }
}

const arrayOfKeys = ['topics', 'topic1'];

function getObjectByKeys(arrayOfKeys) {
  return arrayOfKeys.reduce((a, el, i, arr) => {
    return a[el] || {};
  }, mainObject);
}

console.log(getObjectByKeys(arrayOfKeys));

10-07 17:46