为什么不能通过其键使用映射迭代和对象? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么不能通过其键使用映射迭代和对象? [重复]相关的知识,希望对你有一定的参考价值。

我有这个对象

layouts = 
                lg: [
                     i: 'a', x: 0, y: 0, w: 5.9, h: 3.2 ,
                     i: 'b', x: 6, y: 0, w: 5.9, h: 3.2 ,
                     i: 'c', x: 0, y: 6, w: 11.9, h: 3.2 
                ],
                md: [
                     i: 'a', x: 0, y: 0, w: 1, h: 2 ,
                     i: 'b', x: 1, y: 0, w: 3, h: 2 ,
                     i: 'c', x: 4, y: 2, w: 1, h: 2 
                ],
                sm: [
                     i: 'a', x: 0, y: 0, w: 1, h: 2 ,
                     i: 'b', x: 1, y: 0, w: 3, h: 2 ,
                     i: 'c', x: 4, y: 2, w: 1, h: 2 
                ],
                xs: [
                     i: 'a', x: 0, y: 0, w: 1, h: 2 ,
                     i: 'b', x: 1, y: 0, w: 3, h: 2 ,
                     i: 'c', x: 4, y: 2, w: 1, h: 2 
                ],
                xxs: [
                     i: 'a', x: 0, y: 0, w: 1, h: 2 ,
                     i: 'b', x: 1, y: 0, w: 3, h: 2 ,
                     i: 'c', x: 4, y: 2, w: 1, h: 2 
                ]
            

在功能上我有这个

 var removeIndex = layouts.lg.map(function (item)  return item.i; ).indexOf(id);
    ~removeIndex && layouts.lg.splice(removeIndex, 1);
    var removeIndex = layouts.md.map(function (item)  return item.i; ).indexOf(id);
    ~removeIndex && layouts.md.splice(removeIndex, 1);
    var removeIndex = layouts.sm.map(function (item)  return item.i; ).indexOf(id);
    ~removeIndex && layouts.sm.splice(removeIndex, 1);
    var removeIndex = layouts.xs.map(function (item)  return item.i; ).indexOf(id);
    ~removeIndex && layouts.xs.splice(removeIndex, 1);
    var removeIndex = layouts.xxs.map(function (item)  return item.i; ).indexOf(id);
    ~removeIndex && layouts.xxs.splice(removeIndex, 1);

删除所有包含“ id”值的元素,这些值等于对象中的I。

这样很好,如果我单击remove(a),它将删除所有的巧合。还是C或b取决于参数。

问题是我想将其转换为更易读的内容,所以我做到了。

for(let key in layouts)
        console.log(key) //lg ---> should continue with md, sm , xs, xxs
        var removeIndex = layouts.key.map(function (item)  return item.i; ).indexOf(id);
        ~removeIndex && layouts.key.splice(removeIndex, 1);
    

但它崩溃

未捕获的TypeError:无法读取未定义的属性'map'

然后如何读取这些值?

答案

您可以使用Array#findIndex代替映射和Array#findIndex

indexOf

以上是关于为什么不能通过其键使用映射迭代和对象? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

打字稿:如何制作接受对象的类型,其键匹配通用但所有值都是值参数的映射函数

Maps 数据结构图

Python:就地映射[重复]

一文带你理解:可以迭代大部分数据类型的 for…of 为什么不能遍历普通对象?

以索引为键初始化对象数组[重复]

Java集合中List和 Map区别?