【问题标题】:Is it possible to slice an object?可以切片对象吗?
【发布时间】:2021-08-11 02:20:02
【问题描述】:

类似于Array slice(),是否可以对对象进行切片(不循环通过它的属性)?

简化示例:

var obj = {a:"one", b:"two", c:"three", d:"four"};

例如:获取前2个属性

var newObj = {a:"one", b:"two"};

【问题讨论】:

  • Object.key 把它变成一个数组...
  • 如何定义“第一”两个属性? Javascript 对象的属性没有任何固有的顺序。 stackoverflow.com/questions/5525795/…
  • 我投票决定关闭它,因为@JozefLegény 评论已经正确回答了这个问题。

标签: javascript


【解决方案1】:

从技术上讲,对象的行为类似于哈希表。因此,没有恒定的进入顺序,并且前两个条目并不总是相同。因此,这是不可能的,尤其是在不迭代对象的条目的情况下。

【讨论】:

    【解决方案2】:

    所有主要浏览器(在 Firefox 36、Chrome 40、Opera 27 中测试)都保留 key order in objects,尽管这是 not a given in the standard,正如 Jozef Legény 在 comments 中指出的那样:

    > Object.keys({a: 1, b: 2})
    ["a", "b"]
    > Object.keys({b: 2, a: 1})
    ["b", "a"]
    

    所以理论上你可以使用循环对对象进行切片:

    function objSlice(obj, lastExclusive) {
        var filteredKeys = Object.keys(obj).slice(0, lastExclusive);
        var newObj = {};
        filteredKeys.forEach(function(key){
            newObj[key] = obj[key];
        });
        return newObj;
    }
    var newObj = objSlice(obj, 2);
    

    或者例如下划线的omit function:

    var newObj = _.omit(obj, Object.keys(obj).slice(2));    
    

    【讨论】:

      【解决方案3】:

      你可以使用var newObj = Object.entries(obj).slice(0, 1)

      【讨论】:

        【解决方案4】:

        var obj = {a:"one", b:"two", c:"three", d:"four"};
            delete obj['d'];
            console.info(obj)
            
          /*
          sorry i forgot to put quote around d property name
           o/p
           [object Object] {
          a: "one",
          b: "two",
          c: "three"
        }
          */

        【讨论】:

          猜你喜欢
          • 2017-12-28
          • 1970-01-01
          • 2010-12-11
          • 2015-08-24
          • 2015-08-23
          • 2017-04-07
          • 2018-02-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多