将一个对象存储在另一个对象中
Store an object inside another object
我需要将一个对象插入到另一个对象中,我使用的逻辑是:
// Create object store
const store = {}
// Function to create 'Product' Objects
function createProduct (type, name, price) {
return { type, name, price }
}
// Function to add 'Product' Objects inside the 'Store' Object
function addToStore (obj) {
store.obj = obj
return store
}
const strawberry = createProduct ('fruit', 'strawberry', '0.40')
const peach = createProduct ('fruit', 'peach', '0.80')
addToStore(strawberry)
addToStore(peach)
console.log(store) // < { obj: { type: 'fruit', name: 'peach', price: '0.90' } }
我应该如何编写此函数,以便 store.obj 与参数传递的对象相同?
function addToStore (obj) {
store.obj = obj
return store
// What's happening in the run
function addToStore (peach) {
store.obj = peach
return store
// What I need to happen
function addToStore (peach) {
store.peach = peach
return store
如果你的意思是你希望属性名字来自你在调用addToStore
时使用的变量的名字,你不能相当 这样做,因为当 addToStore
被调用时,它只接收该变量的 value (对对象的引用),它不会接收有关该变量的任何信息本身。
简单的解决方案是将名称作为第二个参数传递:
function addToStore(name, obj) {
store[name] = obj;
return store;
}
// ...
addToStore("peach", peach);
请注意,使用 []
使 属性 名称来自 name
参数,而不是使用带有文字名称的 .
。
有一种方法可以通过使用 shorthand 属性 语法以(非常小的)创建临时对象的成本使其更加自动化。在你想要的对象周围传递一个对象包装器,其中 属性 的名称来自变量名,并让 addToStore
从该包装器中获取对象(或者可能获取所有对象,如果你通过不止一个):
function addToStore(objects) {
Object.assign(store, objects); // Will do the loop and assignments for you
return store;
}
// ...
addToStore({peach});
// ^^^^^^^−−−−−−−−−−− creating the object to pass in using shorthand syntax
你可能不想在一小时内执行数百万次的代码中执行此操作,因为开销很大,但除此之外我不会担心 until/unless 你 运行 进入您追踪到的性能问题。
我需要将一个对象插入到另一个对象中,我使用的逻辑是:
// Create object store
const store = {}
// Function to create 'Product' Objects
function createProduct (type, name, price) {
return { type, name, price }
}
// Function to add 'Product' Objects inside the 'Store' Object
function addToStore (obj) {
store.obj = obj
return store
}
const strawberry = createProduct ('fruit', 'strawberry', '0.40')
const peach = createProduct ('fruit', 'peach', '0.80')
addToStore(strawberry)
addToStore(peach)
console.log(store) // < { obj: { type: 'fruit', name: 'peach', price: '0.90' } }
我应该如何编写此函数,以便 store.obj 与参数传递的对象相同?
function addToStore (obj) {
store.obj = obj
return store
// What's happening in the run
function addToStore (peach) {
store.obj = peach
return store
// What I need to happen
function addToStore (peach) {
store.peach = peach
return store
如果你的意思是你希望属性名字来自你在调用addToStore
时使用的变量的名字,你不能相当 这样做,因为当 addToStore
被调用时,它只接收该变量的 value (对对象的引用),它不会接收有关该变量的任何信息本身。
简单的解决方案是将名称作为第二个参数传递:
function addToStore(name, obj) {
store[name] = obj;
return store;
}
// ...
addToStore("peach", peach);
请注意,使用 []
使 属性 名称来自 name
参数,而不是使用带有文字名称的 .
。
有一种方法可以通过使用 shorthand 属性 语法以(非常小的)创建临时对象的成本使其更加自动化。在你想要的对象周围传递一个对象包装器,其中 属性 的名称来自变量名,并让 addToStore
从该包装器中获取对象(或者可能获取所有对象,如果你通过不止一个):
function addToStore(objects) {
Object.assign(store, objects); // Will do the loop and assignments for you
return store;
}
// ...
addToStore({peach});
// ^^^^^^^−−−−−−−−−−− creating the object to pass in using shorthand syntax
你可能不想在一小时内执行数百万次的代码中执行此操作,因为开销很大,但除此之外我不会担心 until/unless 你 运行 进入您追踪到的性能问题。