Arrays 如何将此对象转换为数组并通过键访问值?
我有一个有很多钥匙的对象。我需要将此对象转换为对象数组,但仍可以通过键访问每个对象的值。 我想从:Arrays 如何将此对象转换为数组并通过键访问值?,arrays,reactjs,object,redux,Arrays,Reactjs,Object,Redux,我有一个有很多钥匙的对象。我需要将此对象转换为对象数组,但仍可以通过键访问每个对象的值。 我想从: {'A': 123, 'B': 453, 'C': 4132} [{'A': 123}, {'B': 453}, {'C': 4132}] 至: {'A': 123, 'B': 453, 'C': 4132} [{'A': 123}, {'B': 453}, {'C': 4132}] 我希望能够使用键访问值,例如'a'或'B'分别返回123和453。 我正在使用Redux,目前我的减速机如
{'A': 123, 'B': 453, 'C': 4132}
[{'A': 123}, {'B': 453}, {'C': 4132}]
至:
{'A': 123, 'B': 453, 'C': 4132}
[{'A': 123}, {'B': 453}, {'C': 4132}]
我希望能够使用键访问值,例如'a'
或'B'
分别返回123
和453
。
我正在使用Redux,目前我的减速机如下所示:
const contextReducer = (state=null, action) => {
switch(action.type){
case 'CONTEXTUALIZE':
state = Object.values(action.payload)
state = state.filter(o => (o === state[0] || o === state[3]))
state = Object.assign(...state)
console.log(state)
return state
default:
return state
}
}
export default contextReducer
['A', 123, 'B', 453, 'C', 4132]
我尝试在返回
之前再次使用Object.values(state)
,但这给了我一个如下项目数组:
const contextReducer = (state=null, action) => {
switch(action.type){
case 'CONTEXTUALIZE':
state = Object.values(action.payload)
state = state.filter(o => (o === state[0] || o === state[3]))
state = Object.assign(...state)
console.log(state)
return state
default:
return state
}
}
export default contextReducer
['A', 123, 'B', 453, 'C', 4132]
如果要以某种下拉式方式渲染
状态
对象或其部分,可以保持状态
对象不变,并在渲染时迭代状态
的键和值,并将每个键值对传递给子组件
例如:
render(){
//…从redux获取“state”
返回(
{Object.keys(state.map)(key=>(
) }
)
}
注意:我们同时使用道具key
和stateKey
,因为key
道具是React中标识的特殊道具,stateKey
将在MyComponent
中使用
原始答案:
{'A': 123, 'B': 453, 'C': 4132}
[{'A': 123}, {'B': 453}, {'C': 4132}]
您可以使用键,使用object.keys(state)
,而不是尝试迭代state
对象的值(使用object.values(state)
,然后使用键,使用state[key]访问每个值
。使用map
调用迭代键,并将每个键转换为包含单个键及其对应值的对象
Object.keys(state.map)(key=>({[key]:state[key]}))
结果:
[{A:123},{B:453},{C:4132}]
如果要以某种下拉式方式呈现状态
对象或其部分,可以保持状态
对象不变,并在呈现时迭代状态
的键和值,并将每个键值对传递给子组件
例如:
render(){
//…从redux获取“state”
返回(
{Object.keys(state.map)(key=>(
) }
)
}
注意:我们同时使用道具key
和stateKey
,因为key
道具是React中标识的特殊道具,stateKey
将在MyComponent
中使用
原始答案:
{'A': 123, 'B': 453, 'C': 4132}
[{'A': 123}, {'B': 453}, {'C': 4132}]
您可以使用键,使用object.keys(state)
,而不是尝试迭代state
对象的值(使用object.values(state)
,然后使用键,使用state[key]访问每个值
。使用map
调用迭代键,并将每个键转换为包含单个键及其对应值的对象
Object.keys(state.map)(key=>({[key]:state[key]}))
结果:
[{A:123},{B:453},{C:4132}]
不幸的是,您试图实现的目标无法直接实现。JS中的数组只能通过整数索引访问
我不知道你为什么需要这种行为,但我建议你这样做
将对象存储在Redux中,然后创建函数,该函数可以将其转换为所需的形状
使用上面的示例,可以是:
state = {'A': 123, 'B': 453, 'C': 4132}
const objectAsArrayOfEntries = (obj) =>
(Object.entries(obj).map(entry => {entry[0]: entry[1]})
这里我使用了函数,它返回一个[key,value]数组的数组,该数组给出了您所要查找的内容的近似表示。不幸的是,您试图实现的目标无法直接实现。JS中的数组只能通过整数索引访问 我不知道你为什么需要这种行为,但我建议你这样做 将对象存储在Redux中,然后创建函数,该函数可以将其转换为所需的形状 使用上面的示例,可以是:
state = {'A': 123, 'B': 453, 'C': 4132}
const objectAsArrayOfEntries = (obj) =>
(Object.entries(obj).map(entry => {entry[0]: entry[1]})
这里我使用了函数,它返回一个[key,value]数组数组,它能很好地表示您要查找的对象。如果将其转换为对象数组,则无法使用键访问其中的对象,而只能使用数字索引。如果将其转换为对象数组,则无法使用键访问其中的对象,而只能使用数字索引。非常感谢,but现在访问新对象数组中每个对象内的值的最佳方式是什么?我希望能够通过键访问它们name@Alex如果要通过键访问值,则无法直接使用此数组,因此最好还是使用原始对象。但是,可以使用
find
m数组的方法,但请注意,与通过键访问对象中的值相比,这具有O(n)
的时间复杂度,但是如果数组不是太大,这不是一个真正的问题。这看起来像是您所追求的吗?[{a:123},{B:453},{C:4132}]。查找(value=>value[key])@HenryWoody嗯,数组不是超大的,大约有200个项目。因为对象不能作为React child
有效,所以我无法通过键将数组作为对象进行访问。所以我不确定还能做什么。我不确定当我试图从我的对象渲染值时,如何真正使用数组的find方法。这看起来不是一个非常可读的选项。@Alex好的,这就是为什么需要数组,这样就可以传递每个子对象(最初是键/值对)然后我建议一种类似的方法,保持状态
不变,但在呈现
方法中,迭代值,但将键/值传递给组件