This question already has answers here:
How do I convert array of Objects into one Object in JavaScript?
                            
                                (14个回答)
                            
                    
                在10个月前关闭。
        

    

我有2个输入文字和一个按钮。用户可以单击添加按钮,这将创建一个同时包含两个输入文本的新行:

演示:https://jsfiddle.net/ndk29mvp/3/

您可以再次单击添加,它将添加更多键值文本框。

<tr ng-repeat="m in options">
    <td>
        <input type="text" name="optionKey_{{$index}}" class="form-control"
               ng-model="m.optionText" />
    </td>
    <td>
        <input type="text" name="optionValue_{{$index}}" class="form-control"
               ng-model="m.optionValue" />
    </td>
</tr>

<button type="button" class="btn btn-primary btn-sm" ng-click="Add()">
  <i class="fa fa-plus"></i> Add</button>


因此,基本上,我正在使用上面的输入创建下拉菜单文本和值。

下面是我的控制器代码:

$scope.options = [];

$scope.Add = function () {
    var option = {};
    option.optionText = $scope.optionText;
    option.optionValue = $scope.optionValue;
    $scope.options.push(option);
};


在我的保存功能中,我想将用户选择的文本和值转换为键,值对。
因此,如果您在上面运行我的演示并查看控制台输出,则输出将显示为:

(2) [{…}, {…}, {…}]
0:  {optionText: "1", optionValue: "11", $$hashKey: "005"}
1:  {optionText: "2", optionValue: "22", $$hashKey: "007"}


我想删除所有这些optionText,optionvalue等,只创建键值对,以便创建一个json对象,如下所示:

{
 "1": "11",
 "2": "22"
}


所以我尝试了以下代码:

$scope.data = [];

_.each($scope.options, function (value) {
    $scope.data[value.optionText] = value.optionValue;
});


但是$ scope.data具有以下输出:

1: "11"
2: "22"


如何正确创建键,值格式数组。

抱歉,这有点琐碎,但是不知何故我无法解决。
而且我不确定该给什么适当的标题。

最佳答案

使用Array.reduce()



var optionsArr = [
   {optionText: "1", optionValue: "11", $$hashKey: "005"},
   {optionText: "2", optionValue: "22", $$hashKey: "007"}
];

var obj = optionsArr.reduce( (acc,i) => {
    acc[i.optionText]=i.optionValue;
    return acc;
}, {} );

console.log(JSON.stringify(obj));

关于javascript - Angular.js:将JSON对象转换为键,值对,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57237556/

10-10 09:51