所以我有这个函数:
export default function getObjectFromTwoArrays(keyArr: Array<any>, valueArr: Array<any>) {
// StartPoint:
// [key1,key2,key3],
// [value1,value2,value3]
//
// EndPoint: {
// key1: value1,
// key2: value2,
// key3: value3
// }
if (keyArr.length === valueArr.length) {
// @ts-ignore
return Object.assign(...keyArr.map((el,index) => ({[el]: valueArr[index]})))
} else {
throw new Error(`Arrays should be the same length: ${{keyArr}}, ${{valueArr}}`)
}
}
所以我需要从上面的例子中得到确切的结果-端点。我试着扩展到一个变量,得到了同样的问题。
我试图替换为:Object.assign({...keyArr.map((el,index) => ({[el]: valueArr[index]}))})
但结果会是:{0: {key1: value1}, 1: {key2: value2}}
关于Object.assign([...keyArr.map((el,index) => ({[el]: valueArr[index]}))])
结果:[{key1: value1}, {key2: value2}]
2条答案
按热度按时间bxjv4tth1#
Object.assign
method至少接受一个参数,但在您的函数中,您正在扩展的数组可能是空的。错误消息中的关键部分是“must be passed to a rest parameter”,从各种重载签名中,您希望使用的是assign(target: object, ...sources: any[]): any;
。为了避免使用// @ts-ignore
,您可以编写(Playground演示)
但是,您真的不应该为此使用
Object.assign
。你想要的是Object.fromEntries
,它接受一个可迭代的元组:yv5phkfx2#
根据参数的名称,看起来像是试图将一个键数组和一个值数组转换为一个对象。但是
Object.assign
需要 * 两个 * 参数:a source and a target。两者都不应该是数组。你想要Object.fromEntries
,但首先你需要将这两个数组组合成一个键/值对数组:Object.fromEntries
方法接受一个键/值对数组并将其转换为对象,它与Object.entries
匡威。参见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries