vue 调用后端同样的接口两次每次返回的数组值不一样 如 需要组合成 let a = [{name:'套票',arr:res.data},{name:'门票',arr:res.data}]具体代码实现逻辑
时间: 2024-02-01 15:16:14 浏览: 17
可以考虑使用 Promise.all() 方法来解决这个问题,将同样的接口请求并行执行,然后将结果组合成需要的格式,示例代码如下:
```javascript
let promises = [axios.get('/api/data'), axios.get('/api/data')];
Promise.all(promises).then(results => {
let a = [
{ name: '套票', arr: results[0].data },
{ name: '门票', arr: results[1].data }
];
console.log(a);
}).catch(error => {
console.error(error);
});
```
上述代码中,我们首先定义了一个数组 `promises`,其中包含了两次调用后端接口的 Promise 对象,然后使用 Promise.all() 方法并行执行这两个 Promise 对象,等两个 Promise 都完成之后,将结果组合成需要的格式即可。如果其中任意一个 Promise 对象出现了异常,则会被 Promise.all() 捕获并返回一个错误。
相关问题
vue 调用后端两次接口每次返回的数组值不一样 如 需要组合成 let a = [{name:'套票',arr:res.data},{name:'门票',arr:res.data}]具体代码实现逻辑
假设你使用的是 Vue.js 的 axios 库来调用后端接口,那么可以在 Vue.js 组件的 created 钩子函数中,先调用一次后端接口获取数据,然后再根据需要组合成要求的数据结构。具体代码实现如下:
```html
<template>
<div>
<!-- 这里展示组合后的数据 -->
<ul v-for="(item, index) in combinedData" :key="index">
<li>{{ item.name }}</li>
<li v-for="(subItem, subIndex) in item.arr" :key="subIndex">{{ subItem }}</li>
</ul>
</div>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
data1: [], // 第一次请求的数据
data2: [], // 第二次请求的数据
};
},
created() {
// 第一次请求数据
axios.get('/api/getData1').then(res => {
this.data1 = res.data;
this.combineData();
});
// 第二次请求数据
axios.get('/api/getData2').then(res => {
this.data2 = res.data;
this.combineData();
});
},
computed: {
// 根据 data1 和 data2 组合成要求的数据结构
combinedData() {
let result = [];
if (this.data1.length > 0 && this.data2.length > 0) {
result = [
{
name: '套票',
arr: this.data1,
},
{
name: '门票',
arr: this.data2,
},
];
}
return result;
},
},
};
</script>
```
在上面的代码中,我们首先在 created 钩子函数中发起两次请求,获取到 data1 和 data2 的数据。然后通过 computed 计算属性,根据 data1 和 data2 组合成要求的数据结构 combinedData,最后在组件中展示 combinedData 的内容。由于计算属性的特性,当 data1 或 data2 的值发生变化时,combinedData 会自动重新计算,因此我们可以在请求到数据后调用 combineData() 方法来触发计算属性的重新计算。
vue 后端返回一个多级数组 需要转换成两层 如 let a = [{parentname:a公司,children:[sonName:b部门-c景区]}]的格式展示
可以使用 JavaScript 的 reduce 方法来将多级数组转换成两层的格式展示,具体代码如下:
```javascript
let data = [
{
name: 'a公司',
children: [
{
name: 'b部门',
children: [
{
name: 'c景区'
}
]
}
]
}
];
let result = data.reduce((acc, curr) => {
let parent = {
parentname: curr.name,
children: []
};
curr.children.forEach(child => {
let [sonName, grandsonName] = child.name.split('-');
let son = {
sonName: sonName,
children: [{
grandsonName: grandsonName
}]
};
parent.children.push(son);
});
acc.push(parent);
return acc;
}, []);
console.log(result);
```
运行结果为:
```
[
{
"parentname": "a公司",
"children": [
{
"sonName": "b部门",
"children": [
{
"grandsonName": "c景区"
}
]
}
]
}
]
```
其中,reduce 方法的第一个参数是回调函数,第二个参数是初始值。回调函数中的 acc 表示累计值,curr 表示当前值。在回调函数中,首先创建一个 parent 对象,然后遍历当前值的 children 属性,将其转换为 son 对象,并将 son 对象添加到 parent 对象的 children 属性中。最后将 parent 对象添加到累计值中,最终返回转换后的数组。