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)
我试图使用切片对象
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)
对此最好的现代解决方案是Object.fromEntries和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)Run Code Online (Sandbox Code Playgroud)
您可以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)
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':'一个'}]