在vue中数组对象转换为tree

直接上代码:

<template>

<div>

<ul>

<li v-for="list in datas(dataList)" :key="list.id">

<!-- {{list}} -->

<span>{{list.name}}</span>

<ul>

<li v-for="(item,index) in  list.children" :key="index">

<span>{{item.name}}</span>

<ul>

<li v-for="(items,index) in  item.children" :key="index">{{items.name}}</li>

</ul>

</li>

</ul>

</li>

</ul>

</div>

</template>

<script>

export default {

data() {

return {

dataList: [

{ id: 1, parentId: null, name: "世界" },

{ id: 2, parentId: 1, name: "中国" },

{ id: 201, parentId: 2, name: "湖南" },

{ id: 202, parentId: 2, name: "广东" },

{ id: 3, parentId: 1, name: "US" },

{ id: 302, parentId: 3, name: "California" },

{ id: 308, parentId: 3, name: "Washington" }

]

};

},

computed: {

datas() {

return function translateDataToTree(data) {

let parents = data.filter(

value => value.parentId == "undefined" || value.parentId == null

);

let children = data.filter(

value => value.parentId !== "undefined" && value.parentId != null

);

let translator = (parents, children) => {

// 遍历父节点数据

parents.forEach(parent => {

// 遍历子节点数据

children.forEach((current, index) => {

// 当父节点对应的一个子节点相等时

if (current.parentId === parent.id) {

//对子节点数据进行深复制,防止当temp改变而改变子节点

let temp = JSON.parse(JSON.stringify(children));

// 让当前子节点从temp中移除,temp作为新的子节点数据

temp.splice(index, 1);

// 让当前子节点作为唯一的父节点,去递归查找其对应的子节点

translator([current], temp);

// 把找到子节点放入父节点的children属性中

typeof parent.children !== "undefined"

? parent.children.push(current)

: (parent.children = [current]);

}

});

});

};

// 调用转换方法

translator(parents, children);

//返回

return parents;

};

}

}

};

</script>

原文地址:https://www.cnblogs.com/drBlog/p/12568399.html

时间: 2024-07-29 15:57:50

在vue中数组对象转换为tree的相关文章

mogodbshell中数组对象查询修改方法

在mongodb中,存在如下数据 { "_id" : ObjectId("59af55078a8fc5e51ff425de"), "title" : "title1", "col" : "col 1", "reader" : [ { "readername" : "jim", "isread" : true

JavaScript中数组对象详解

Array对象即数组对象用于在单个变量中存储多个值,JS的数组是弱类型的,所以允许数组中含有不同类型的元素,数组元素甚至可以是对象或者其他数组. 创建数组的语法 1.Array构造器 1.var list=new Array(); 2.var list=new Array(size); 3.var list=new Array(element0,element1,...elementn); 2.字面量的方式 var Array[element0,element1,...elementn]; 举例

JS中数组对象去重

JS数组去重 JS中对数组去重最好不要用unique方法,该方法主要是对dom节点数组的去重,如果对普通的数组元素去重只会去掉与之相邻的重复元素,也就是如果数组中还有不相邻的重复元素存在,将不会被去掉,而且有时候会出现问题,所以对数组去重可以利用如下方法: 先对数组a进行遍历,同时创建一个新的数组对象arr for (var i=0 ;i<a.length;i++) {    if (arr.indexOf(a[i]) == -1) { arr.push(a[i]) } } 经过这样处理后的数组

使用vue实现数组对象排序

从网上找到的例子用vue来实现数组对象排序 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-U

一个类数组对象转换为一个真正的数组

上来就是暴力结论,可先看案例: (1)该类数组对象必须具有length属性,用于指定数组的长度.如果没有length属性,那么转换后的数组是一个空数组.      (2)该类数组对象的属性名必须为数值型或字符串型的数字(该类数组对象的属性名可以加引号,也可以不加引号) 举个例子: let array = { 0: 'name', 1: 'age', 2: 'sex', //注意这些属性名的类型 是数值型 3: ['user1','user2','user3'], 'length': 4 //注意

vue中数组更新视图不响应问题

数组更新注意事项 Vue 包含一组观察数组的变异方法,所以它们也将会触发视图更新.这些方法如下: push() pop() shift() unshift() splice() sort() reverse() 由于 JavaScript 的限制,Vue 不能检测以下变动的数组: 当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue当你修改数组的长度时,例如:vm.items.length = newLength 举个例子: var vm = ne

js中数组对象去重的方法

var arr = [{ key: '01', value: '乐乐' }, { key: '02', value: '博博' }, { key: '03', value: '淘淘' },{ key: '04', value: '哈哈' },{ key: '01', value: '乐乐' }]; // 方法1:利用对象访问属性的方法,判断对象中是否存在key var result = []; var obj = {}; for(var i =0; i<arr.length; i++){ if(

js中数组对象字符串的相互转换

对象-数组-字符串: 例如: var data = { user:"userName", pass:"12121" };//这是一个对象 如果要给这个data 对象追加一个属性就比如: new Date( ).getTime( );//获取当前时间到那个时间的时间间隔单位是毫秒: data.time = new Date( ).getTime( ); 此时data 里面就多了一个属性: time : " 获取到的那个毫秒数" 即: var dat

vue中数组删除,页面没重新渲染

创建一个组件时,数据类型是数组,在删除这个数组中的数据时,数组中的数据是对的,但页面渲染的数据却不对. 举例:(不一定复现) <ul> <li v-for="(item, index) in peoples" :key="index">{{item.name}} <span @click="del(index)">删除</span> </li> </ul> <scrip