我已经想出了一种不同的方法来解决我眼前的问题,但我忍不住向那里的爱好者提出这个问题! 这是一个高级问题。
所以 JavaScript 中几乎所有东西(除了原始类型)都是对象,包括数组。因此,您可以为其分配属性。
var arr = [];
arr[1] = 42;
arr[5] = 666;
arr.firstName = 'ebenezer';
arr.lastName = 'scrooge';
var arr2 = [];
arr2.firstName = 'daffy';
arr2.lastName = 'duck';
var obj2 = {};
obj2.firstName = 'smokey';
obj2.lastName = 'bear';
我将
arr
的数组属性描述为“内在”数组:
arr[1] // returns 42
所以我的问题是:我可以将内部数组(整个数组而不是任何其他属性)分配给其他对象,例如:
arr2.arrayProp (??something like this??) = arr[];
arr2[1] // want it to return 42
arr2.firstName // want it to return 'daffy'
obj2[](??something like this??) = arr[];
obj2[1] // want it to return 42
obj2.firstName // want it to return 'smokey'
显然,如果我分配整个数组或对象,它只会创建对原始对象及其所有属性的引用。
我想知道是否有一些“幕后”方法可以仅分配数组属性。
我认为答案是“不”,但令我惊讶的是。
我不确定我是否完全理解您的问题,可能是 X/Y 问题,但也许这些示例对您有用?
将数组元素复制到另一个数组
let arr = [];
arr[1] = 42;
arr[5] = 666;
arr.firstName = 'Ebenezer';
arr.lastName = 'Scrooge';
let arr2 = [];
arr2.firstName = 'Daffy';
arr2.lastName = 'Duck';
// Copy only the numeric indexed elements from arr to arr2 using Object.hasOwn
Object.keys(arr).forEach(key => {
if (!isNaN(key)) {
if (Object.hasOwn(arr, key)) {
arr2[key] = arr[key];
}
}
});
console.log(arr2[1]); // Outputs 42
console.log(arr2.firstName); // Outputs 'Daffy'
将数组元素复制到对象
let arr = [];
arr[1] = 42;
arr[5] = 666;
arr.firstName = 'Ebenezer';
arr.lastName = 'Scrooge';
let obj2 = {};
obj2.firstName = 'Smokey';
obj2.lastName = 'Bear';
// Copy only the numeric indexed elements from arr to obj2 using Object.hasOwn
Object.keys(arr).forEach(key => {
if (!isNaN(key)) {
if (Object.hasOwn(arr, key)) {
obj2[key] = arr[key];
}
}
});
console.log(obj2[1]); // Outputs 42
console.log(obj2.firstName); // Outputs 'Smokey'