How can I slice an object in Javascript?

2020-05-23 06:36发布

I was trying to slice an object using Array.prototype, but it returns an empty array, is there any method to slice objects besides passing arguments or is just my code that has something wrong? Thx!!

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);

10条回答
放荡不羁爱自由
2楼-- · 2020-05-23 07:05

The best modern solution to this is the combination of Object.fromEntries and Object.entries.

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

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

console.log(sliced)

查看更多
Ridiculous、
3楼-- · 2020-05-23 07:06

You can't unless it has a [Symbol.iterator] generator function and length property exists. Such as;

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

my_object[Symbol.iterator] = function* (){
                                          var oks = Object.keys(this);
                                          for (var key of oks) yield this[key];
                                         };

sliced = Array.prototype.slice.call(my_object, 2);
console.log(sliced);

查看更多
Root(大扎)
4楼-- · 2020-05-23 07:10

You don't mention it in your question, but that looks awfully a lot like an arguments object.

Convert it to an array using Array.from() then use it like any other array. As long as it is an enumerable object.

For a polyfill for older browsers, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from

查看更多
冷血范
5楼-- · 2020-05-23 07:12

I think it can helps you:

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

var sliced = Object.keys(my_object).map(function(key) { return my_object[key] }).slice(4);

console.log(sliced);
查看更多
登录 后发表回答