如何在地图功能中获取每个ID的项目

时间:2019-05-04 20:46:46

标签: javascript arrays wordpress-rest-api

我正在尝试使用Wordpress API来获取一些数据,我需要基于restbase和ID进行此操作。

我有一个看起来像这样的数组:

const array = [
    {
        taxonomy: 'category',
        rest_base: 'categories',
        id: [ 1, 2 ]
    },
    {
        taxonomy: 'post_tag',
        rest_base: 'tags',
        id: [ 4, 5, 6, 7 ]
    }
];

这是地图功能:

array.map( ({ rest_base, id }) => {
    console.log( rest_base ); // categories or tags
    console.log( id ); // array of id's

    // Do a call here for each id
});

我需要以某种方式获取所有个人ID,这样我才能拨打电话:

example.com/wp-json/wp/v2/<rest_base>/<id>

有人可以帮我吗?

3 个答案:

答案 0 :(得分:1)

使用Array.flatMap()迭代外部数组,并使用id迭代Array.map()数组,并使用fetch或类似的API进行调用,您将获得一个promise数组:

const array = [{"taxonomy":"category","rest_base":"categories","id":[1,2]},{"taxonomy":"post_tag","rest_base":"tags","id":[4,5,6,7]}];

const result = array.flatMap( ({ rest_base, id }) => 
  id.map(v => `example.com/wp-json/wp/v2/${rest_base}/${v}`) // wrap the string with a fetch or similar function
);

console.log(result);

如果您不能使用Array.flatMap(),请使用嵌套的Array.map()调用,然后扩展到Array.concat()进行展平:

const array = [{"taxonomy":"category","rest_base":"categories","id":[1,2]},{"taxonomy":"post_tag","rest_base":"tags","id":[4,5,6,7]}];

const result = [].concat(...array.map( ({ rest_base, id }) => 
  id.map(v => `example.com/wp-json/wp/v2/${rest_base}/${v}`) // wrap the string with a fetch or similar function
));

console.log(result);

答案 1 :(得分:0)

您可以使用任何http请求库。在async / await中使用浏览器的访存API的最简单方法:

const resultArray = array.map( async({ rest_base, id }) => {
    console.log( rest_base ); // categories or tags
    console.log( id ); // array of id's

    return id.map(id => await fetch(`example.com/wp-json/wp/v2/${rest_base}/${id}`));

});

await函数将返回调用结果。这样,您可以同步获取数据。可以使数据异步,可以创建一个Promise数组并使用Promise all:

const promiseArray = array.map( async({ rest_base, id }) => {
    console.log( rest_base ); // categories or tags
    console.log( id ); // array of id's

    return id.map(id => return fetch(`example.com/wp-json/wp/v2/${rest_base}/${id}`));
});

const result = Promise.all(promiseArray);

答案 2 :(得分:0)

我可能会使用Array.prototype.reduce创建一个对象,其中键是您的rest_base值,而这些值是对应的id值。在此之上,您可以像下面这样简单地进行迭代:

const arr = [{
    taxonomy: 'category',
    rest_base: 'categories',
    id: [1, 2]
  },
  {
    taxonomy: 'post_tag',
    rest_base: 'tags',
    id: [4, 5, 6, 7]
  }
];

const map = arr.reduce((acc, val) => {return {...acc, [val.rest_base]: val.id}}, {});
/*
{
  "categories": [
    1,
    2
  ],
  "tags": [
    4,
    5,
    6,
    7
  ]
}
*/
for (const rest_base in map) {
  for (const id of map[rest_base]) {
    console.log(`example.com/wp-json/wp/v2/${rest_base}/${id}`) 
  }
}
/*
example.com/wp-json/wp/v2/categories/1
example.com/wp-json/wp/v2/categories/2
example.com/wp-json/wp/v2/tags/4
example.com/wp-json/wp/v2/tags/5
example.com/wp-json/wp/v2/tags/6
example.com/wp-json/wp/v2/tags/7
*/