如何在Javascript中切片对象?

JC *_*cia 17 javascript arrays arguments object slice

我试图使用Array.prototype切片对象,但是它返回一个空数组,除了传递参数之外是否有任何方法来切片对象,或者只是我的代码有错误?谢谢!!

var my_object = {
 0: 'zero',
 1: 'one',
 2: 'two',
 3: 'three',
 4: 'four'
};

var sliced = Array.prototype.slice.call(my_object, 4);
console.log(sliced);
Run Code Online (Sandbox Code Playgroud)

tra*_*rad 36

还没有人提到Object.entries(),这可能是最灵活的方法.此方法使用与for..in枚举属性时相同的顺序,即属性最初在对象中输入的顺序.您还可以获得具有属性和值的子数组,以便您可以使用任何一个或两个.最后,您不必担心属性是数字或设置额外的长度属性(就像使用时一样Array.prototype.slice.call()).
这是一个例子:

const obj = {'prop1': 'foo', 'prop2': 'bar', 'prop3': 'baz', 'prop4': {'prop': 'buzz'}};
Run Code Online (Sandbox Code Playgroud)

您想要切割前两个值:

Object.entries(obj).slice(0,2).map(entry => entry[1]);
//["foo", "bar"]
Run Code Online (Sandbox Code Playgroud)

所有的钥匙?

Object.entries(obj).slice(0).map(entry => entry[0]);
//["prop1", "prop2", "prop3", "prop4"]
Run Code Online (Sandbox Code Playgroud)

最后一个键值对?

Object.entries(obj).slice(-1)
//[ ['prop4', {'prop': 'buzz'}] ]
Run Code Online (Sandbox Code Playgroud)

  • “ Object.entries”无疑是一个有用的方法(显然是ECMA 262的新增功能)……但是它似乎只是产生一个数组数组,这并不是OP真正要求的。 (4认同)
  • 我希望我能投票赞成三遍。谢谢! (2认同)
  • 不幸的是,这个解决方案将产生一个新的数组而不是一个新的对象。当我们想要对一个对象进行切片时,我们期望的是一个切片的对象而不是一个切片的数组。 (2认同)

Ber*_*rgi 8

我试图使用切片对象Array.prototype,但它返回一个空数组

那是因为它没有.length财产.它将尝试访问它,获取undefined,将其转换为数字,获取0并最多切片对象中的许多属性.因此,要实现所需的结果,必须length手动通过对象为其分配一个或迭代器:

var my_object = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four'};

my_object.length = 5;
console.log(Array.prototype.slice.call(my_object, 4));

var sliced = [];
for (var i=0; i<4; i++)
    sliced[i] = my_object[i];
console.log(sliced);
Run Code Online (Sandbox Code Playgroud)


Kev*_*ert 8

对此最好的现代解决方案是Object.fromEntriesObject.entries的组合。

const foo = {
    one: 'ONE',
    two: 'TWO',
    three: 'THRE',
    four: 'FOUR',
}

const sliced = Object.fromEntries(
    Object.entries(foo).slice(1, 3)
)

console.log(sliced)
Run Code Online (Sandbox Code Playgroud)


Ame*_*lla 7

您可以reduce得到Object.keys函数 的结果

const myObject = {
 0: 'zero',
 1: 'one',
 2: 'two',
 3: 'three',
 4: 'four'
};

const sliced = Object.keys(myObject).slice(0, 2).reduce((result, key) => {
                    result[key] = myObject[key];

                    return result;
                }, {});

console.log(sliced);
Run Code Online (Sandbox Code Playgroud)

  • 最好的!爱它。 (2认同)

rek*_*nyz 5

var obj = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four'};
var result = Object.keys(obj).slice(0,2).map(key => ({[key]:obj[key]}));

console.log(result);
Run Code Online (Sandbox Code Playgroud)

[{'0':'零'},{'1':'一个'}]