[{"t": "数1","Type": "1","child":[{"t": "全2","Type": "2"}]}]js方法根据Type将格式转换为[{"t": "数1","Type": "1"},{"t": "全2","Type": "2"}]
时间: 2023-09-01 07:07:15 浏览: 40
可以使用数组的flatMap()方法和对象的解构赋值来实现:
```javascript
const data = [{"t": "数1","Type": "1","child":[{"t": "全2","Type": "2"}]}];
const result = data.flatMap(({child, ...rest}) => child ? [rest, ...child] : rest);
console.log(result);
// [{"t": "数1","Type": "1"},{"t": "全2","Type": "2"}]
```
解析:
1. 使用数组的flatMap()方法遍历原始数据数组。
2. 对于每个元素,使用对象的解构赋值将其分解为child和rest两个对象。
3. 如果child存在,说明该元素有子元素,将rest和child展开为一个新数组返回。否则,只返回rest对象。
4. 最终得到新的数组格式。
相关问题
[{"t": "数1","Type": "1"},{"t": "全2","Type": "2"}]js方法根据Type将格式转换为[{"t": "数1","Type": "1","child":[{"t": "全2","Type": "2"}]}]
以下是JavaScript代码实现:
```javascript
function convertFormat(arr) {
let result = [];
for (let i = 0; i < arr.length; i++) {
let item = arr[i];
if (item.Type === "1") {
result.push(item);
} else if (item.Type === "2") {
let parent = result.find((p) => p.Type === "1");
if (!parent) {
parent = { t: "", Type: "1", child: [] };
result.push(parent);
}
parent.child.push(item);
}
}
return result;
}
// 示例
let arr = [{ t: "数1", Type: "1" }, { t: "全2", Type: "2" }];
let result = convertFormat(arr);
console.log(result); // [{ t: "数1", Type: "1", child: [{ t: "全2", Type: "2" }] }]
```
思路解析:
1. 遍历原数组,对于Type为1的元素,直接加入结果数组中;
2. 对于Type为2的元素,先在结果数组中查找Type为1的元素作为父节点,如果没有则创建一个空对象作为父节点;
3. 将Type为2的元素加入父节点的child数组中;
4. 返回结果数组。
Invalid prop: type check failed for prop thDataArr. Expected , got Array
当在Vue项目中通过Props属性向子组件传递值时,如果传递的值的类型与子组件中定义的类型不匹配,就会出现Invalid prop: type check failed for prop的错误信息。在这个错误信息中,会提示期望的类型和实际传递的类型不匹配。例如,当传递一个数组给一个期望接收对象类型的props时,就会出现类似于Invalid prop: type check failed for prop thDataArr. Expected Object, got Array的错误信息。
解决这个问题的方法是,在父组件中传递给子组件的值的类型必须与子组件中定义的类型相匹配。如果子组件中定义的类型是对象,那么在父组件中传递给子组件的值也必须是一个对象。如果子组件中定义的类型是数组,那么在父组件中传递给子组件的值也必须是一个数组。
以下是一个解决这个问题的例子:
假设子组件中定义了一个props,期望接收一个对象类型的值:
```javascript
props: {
person: Object
}
```
在父组件中,如果传递一个数组给这个props,就会出现Invalid prop: type check failed for prop的错误信息:
```javascript
<template>
<div>
<child-component :person="['John', 'Doe']"></child-component>
</div>
</template>
```
正确的做法是传递一个对象给这个props:
```javascript
<template>
<div>
<child-component :person="{firstName: 'John', lastName: 'Doe'}"></child-component>
</div>
</template>
```