vue 中 v-for 遍历 二维 对象数组

本文探讨JavaScript中使用typeof进行类型检测的局限性及Object.prototype.toString方法的应用,并通过实例展示了Vue.js中不同维度数组的遍历技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先来看一个例子

var a = {};
var b = [];
var i =0;
while(i<10){
    b[i] = a[i] = i++;
}
console.log('a '+typeof a +' b '+ typeof b); //a object b object  注:数组也是对象
console.log(a); //{ '0': 0,'1': 1,'2': 2,'3': 3,'4': 4,'5': 5,'6': 6,'7': 7,'8': 8,'9': 9 }
console.log(b); //[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
console.log('a.length '+a.length+ ' b.length '+b.length); //a.length undefined b.length 10
/*在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种。
对于数组、函数、对象来说,其关系错综复杂,使用 typeof 都会统一返回 “object” 字符串
JavaScript中,通过Object.prototype.toString方法,判断某个对象值属于哪种内置类型。*/
console.log(Object.prototype.toString.call(a));//[object Object]
console.log(Object.prototype.toString.call(b));//[object Array]

Object.prototype.toString方法返回的内置类型
console.log(Object.prototype.toString.call(123)) //[object Number]
console.log(Object.prototype.toString.call(‘123’)) //[object String]
console.log(Object.prototype.toString.call(undefined))
//[object Undefined]
console.log(Object.prototype.toString.call(true)) //[object Boolean]
console.log(Object.prototype.toString.call({})) //[object Object]
console.log(Object.prototype.toString.call([])) //[object Array]
console.log(Object.prototype.toString.call(function(){})) //[object Function]

在这一句 console.log(‘a.length ‘+a.length+ ’ b.length ‘+b.length); 中,a 是没有 length属性的(类数组对象:只包含使用从零开始,且自然递增的整数做键名,并且定义了length表示元素个数的对象,我们就认为它是类数组对象),所以会输出undefined

而我们在vue的data里用的数据是这样的

    data : [
             [
            {
              name: 'best',
              age:19
            },
            {
              name: 'jhon',
              age:19
            }
          ],
          [
            {
              name: 'site',
              age:19
            },
            {
              name: 'hyte',
              age:19
            }
          ],
        ]

1.假如我们这样写

<table cellpadding="0" cellspacing="0" >
      <tr v-for='item in data' :key="item">
        {{item}}
      </tr>
</table>
会这样输出,这是遍历一维数组
[ { “name”: “best”, “age”: 19 }, { “name”: “jhon”, “age”: 19 } ]
[ { “name”: “site”, “age”: 19 }, { “name”: “hyte”, “age”: 19 } ]

2.假如我们这样写

<table cellpadding="0" cellspacing="0" >
  <tr v-for='item in data' :key="item">
    <template v-for='value in item'>
      {{value}}
    </template>
  </tr>
</table>
这是遍历每一个二维数组
{ “name”: “best”, “age”: 19 } { “name”: “jhon”, “age”: 19 }
{ “name”: “site”, “age”: 19 } { “name”: “hyte”, “age”: 19 }

3.假如我们这样写

<table cellpadding="0" cellspacing="0" >
  <tr v-for='item in data' :key="item">
    <template v-for='value in item'>
      <template  v-for='v in value'>
        <td :key="v">{{v}}</td>
      </template>
    </template>
  </tr>
</table>
这是遍历每一个对象,这个地方不太好理解,其实就是把每个对象的 value 给遍历出来了,多理解一下就好了
best 19 jhon 19
site 19 hyte 19

Go~~

Vue3中,`el-table`组件是Element UI库中的一个用于展示表格的强大工具,它特别适合处理数据驱动的界面。当你有一个二维对象数组(即每个元素是一个包含多个键值对的对象数组内部再包含这样的对象)时,可以按照以下步骤来设置和渲染: 1. **数据准备**: 假设你有一个这样的二维对象数组: ```javascript const tableData = [ { id: 1, name: '张三', age: 25, address: { city: '北京', district: '朝阳区' } }, ... // 更多对象 ]; ``` 2. **模板结构**: 使用`v-for`指令遍历每一行数据,并嵌套遍历对象内的属性: ```html <template> <el-table :data="tableData"> <el-table-column prop="id" label="ID"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <!-- 如果有嵌套对象,可以添加嵌套列 --> <el-table-column prop="address.city" label="城市"></el-table-column> <el-table-column prop="address.district" label="区域"></el-table-column> </el-table> </template> ``` 3. **响应式绑定**: 确保你在Vue实例上已经创建了`tableData`变量,并且通过`<script>`标签将其注入到组件中,或者作为计算属性或watch监听变化。 4. **动态列名**: 如果需要显示动态的列名,可以在`column`里使用`formatter`属性: ```html <el-table-column v-for="(item, index) in objectKeys(tableData[0])" :key="index" :prop="item" :label="item" :formatter="formatNestedColumn"></el-table-column> ``` `formatNestedColumn`函数可以进一步处理嵌套对象的字符串显示。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值