Javascript 如何获取一个对象,将其设置为与另一个对象的属性相匹配的预定值的特定属性?
***我修改了上述问题,以便根据我的问题意图和此代码模式可能出现的混淆/误解,使其更有意义 总的来说,我试图实现的是创建一个对象的能力,从空开始,将其设置为具有属性名称的对象,同时将该属性名称设置为另一个对象的值 这将允许我创建一个对象,该对象将具有一个属性,该属性将包含一个具有属性的对象,其中一个属性将是键,该值将是新对象设置为的属性的名称 为什么我需要这个或者想要这个新的东西 我认为该模式的用途是获取设置为接口/名称的对象,在该接口/名称中,设置为包含属性的对象与引用属性值中的一个值具有相同的名称。这听起来很混乱,所以我创建了一个jsbin来说明我所要求的解决方案。。。如果其他人对我的问题有更好的解释或标题,请提供建议 我随代码示例提供的答案是我通过理解而提出并实现的 ------上一个问题-------- 我的问题是,为什么或者什么时候应该决定获取一个objects属性并将其设置为另一个对象。对我来说,似乎遗传“背景”是原因,但我不是100%确定。此外,我不确定我应该在什么时候想到这一点,以及在什么情况下我应该决定使用这种模式 我可以阅读代码并遵循它,但我遇到的最困惑和最相关的问题是object[property]=otherObject 也许这与Object.assign()构造有关?我所知道的是,我已经看过几次了,我有点困惑,为什么我应该知道何时使用这种模式。不过,我可能还遗漏了一些东西 下面是我正在引用的代码示例Javascript 如何获取一个对象,将其设置为与另一个对象的属性相匹配的预定值的特定属性?,javascript,object,javascript-objects,Javascript,Object,Javascript Objects,***我修改了上述问题,以便根据我的问题意图和此代码模式可能出现的混淆/误解,使其更有意义 总的来说,我试图实现的是创建一个对象的能力,从空开始,将其设置为具有属性名称的对象,同时将该属性名称设置为另一个对象的值 这将允许我创建一个对象,该对象将具有一个属性,该属性将包含一个具有属性的对象,其中一个属性将是键,该值将是新对象设置为的属性的名称 为什么我需要这个或者想要这个新的东西 我认为该模式的用途是获取设置为接口/名称的对象,在该接口/名称中,设置为包含属性的对象与引用属性值中的一个值具有相同
constructor(props) {
super(props);
this.state = {
completedAssets : 0,
totalAssets : 0,
currentDownloads: {},
logs: []
};
}
let currDownloadObject = {
fileName: fileName,
currentSize: loaded,
totalSize: total,
complete: (loaded === total),
completeOrder : fileCompleteOrder,
order: (file) ? file.order : Object.keys(this.state.currentDownloads).length + 1
}
let currentDownloadStateArray = Object.assign({},this.state.currentDownloads);
currentDownloadStateArray[fileName] = currDownloadObject;
this.setState({currentDownloads: currentDownloadStateArray});
下面是一个最让我困惑的输出示例
运行此日志语句时:
console.log('currentDownloadStateArray ', currentDownloadStateArray);
我得到了一个退货的例子:
https://navigation/az.png: {fileName: "https://navigation/az.png", currentSize: 7451, totalSize: 7451, complete: true, completeOrder: 1, …}
https://navigation/destination.png: {fileName: "https://avigation/destination.png", currentSize: 8322, totalSize: 8322, complete: true, completeOrder: 2, …}
现在,实际上,currentDownloadStateArray被设置为一个对象,该对象的每个fileName属性都有一个接口 要创建由包含该对象的另一个对象设置为值的新对象,请执行以下操作
let state = {
iteratedFoo: {} // this is a dictionary of dictionaried objects... an object which is a collection of objects.
};
let currentDownloadState = (someValue, anotherValue, urlName) => {
let bar = {
fileName: urlName,
someProp: someValue,
anotherProp: anotherValue
}
let foo = Object.assign({}, state['iteratedFoo'] )
// console.log('foo[urlName] = ', foo[urlName]); // undefined because it wasn't set yet on first loop
foo[urlName] = bar;
console.log('bar ', bar);
console.log('foo ', foo);
console.log('foo[urlName] = ', foo[urlName]);
state['iteratedFoo'] = foo;
console.log('state["iteratedFoo"] ', state['iteratedFoo']);
}
currentDownloadState('this value', 'another value', 'www.msn.com');
currentDownloadState('this value', 'another value', 'www.espn.com');
currentDownloadState('this value', 'another value', 'www.theverge.com');
重复此函数时,iteratedFoo对象将创建一个对象,该对象是foo对象的集合,该对象包含一个属性名称,该属性名称包含一个具有属性的值,其中一个属性是foo属性名称的值。。。在本例中为foo[urlName]
这样做的目的和用例最终将创建由所述被引用对象的属性值引用的对象集合
结果state.iteratedFoo对象现在如下所示
"state[\"iteratedFoo\"] "
[object Object] {
www.espn.com: [object Object] {
anotherProp: "another value",
fileName: "www.espn.com",
someProp: "this value"
},
www.msn.com: [object Object] {
anotherProp: "another value",
fileName: "www.msn.com",
someProp: "this value"
},
www.theverge.com: [object Object] {
anotherProp: "another value",
fileName: "www.theverge.com",
someProp: "this value"
}
}
到底是什么让你困惑?对象可以嵌套吗?还是这个代码?@Jonaswillms我得到的对象可以嵌套和字典字典的字典。。。令人困惑的是,为什么我要将对象的属性设置为另一个对象?例如,这个newObj[property]将等于其他对象。。。为什么我要这么做。。。这更有意义吗?@jonaswillms当我最终设置currentDownloads的状态obj时:我只使用newObj数组,即currentDownloads:currentDownloadStateArray。。。不是currentDownloadStateArray[fileName]问题不清楚。你想知道标题中问题的答案吗?或者你更感兴趣的是为什么它是在一个特定的情况下进行的?为什么一般都这么做?