Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何将此对象转换为数组并通过键访问值?_Arrays_Reactjs_Object_Redux - Fatal编程技术网

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好的,这就是为什么需要数组,这样就可以传递每个子对象(最初是键/值对)然后我建议一种类似的方法,保持
状态
不变,但在
呈现
方法中,迭代值,但将键/值传递给组件