【问题标题】:AngularJS/JavaScript creating a new object from another objectAngularJS/JavaScript 从另一个对象创建一个新对象
【发布时间】:2026-01-16 19:30:02
【问题描述】:

我有一个问题困扰了一段时间,正在寻求一些建议。

在我的控制器上,我对后端进行了 Restangular 调用以检索一些数据,如下所示

Angularjs 控制器(使用 Restangular)

Pages.controller('PageContentController', ['$scope', '$routeParams', '$location', 'Restangular', function($scope, $routeParams, $location, Restangular) {

    $scope.id = $routeParams.id;

    Restangular.one('pages', $scope.id).getList('content').then(function(response) {
        $scope.content = response;

        $scope.content = _.forEach($scope.content, function(content) {
            content[content.name] = content.content;
        });
        console.log($scope.content);
    });

}]);

现在,当我退出 $scope.content 时,我得到了一个包含三个与此类似的对象的数组

Array[3]
    0: Object
        banner_heading: "Services",
        id: 1

    1: Object 
        banner_text: "some banner text",
        id: 2

    2: Object
        banner_img: "services.jpg",
        id: 3

这些对象还有很多,但我已针对问题对其进行了简化,这些是我想从对象中获取的唯一属性。

banner_heading、banner_text 和 banner_img 都是在上面的控制器中使用 lodash forEach 循环动态创建的属性。

现在谈谈我想要完成的事情。我需要从这个看起来像这样的对象数组中创建一个对象

{
    "banner_heading": {
        "data": "Services",
        "id": 1 
    },
    "banner_text": {
        "data": "some banner text",
        "id": 2 
    },
    "banner_img": {
        "data": "services.jpg",
        "id": 3 
    }
}

在我看来,基本上我需要能够输出像{{ banner_heading }} 这样的数据,但我还需要能够维护用于更新服务器端数据的 ID。

我不确定如何做到这一点,我已经为此困惑了几个小时,非常感谢任何帮助。

【问题讨论】:

  • 你能在问题中添加你想要的对象的实际 JSON 吗?
  • @lucuma 我不确定你的意思,我在上一个代码 sn-p 中举了一个例子来说明我想要完成的事情,它的格式不正确吗?
  • 那不是代码 sn-p 它看起来像是调试工具的一些输出。这是你想要的{ {'banner_heading': 'services', id:1}, {'banner_text': 'some banner text', id:2}, {'banner_img':'services.jpg', id:3}} 吗?
  • 你至少可以使用标准的javascript符号来定义你想要的对象吗?
  • 不,您的示例看起来像是三个不同的对象,我需要将它们全部放在一个对象中,这样我就不必使用ng-repeat

标签: javascript arrays json angularjs object


【解决方案1】:

我将提出一个不需要对原始数组数据进行分组或做任何事情的解决方案:

假设我们每个问题都有这个:

 $scope.content = [{ banner_heading: "Services", id: 1}, {banner_text:'some text', id:2}, {banner_img:'service.jpg', id:3}];

我们可以编写一个函数来提取我们需要的东西:

$scope.getData = function(n) {
   // question states lodash is being used
   var row = _.find($scope.content, function(item) {
       return n in item;
   });
   return row[n];
}

$scope.getId = function(n) {
  var row = _.find($scope.content, function(item) {
       return n in item;
   });
   return row.id;
}

在视图上:

{{ getData('banner_text') }}

这是一个演示:http://plnkr.co/edit/eHT42YQTaXWtmpbGwUZB?p=preview

【讨论】:

  • 嗯,我不确定为什么这对我来说返回 undefined。
  • 确保您传递给 getData 的字符串是密钥的确切名称。
  • 是的,我......嗯,很困惑..我希望它能够工作,这是一个伟大而简单的解决方案
  • 太棒了,成功了。但我剩下的唯一问题是我没有办法获取个人 ID
  • 我需要能够获取 id 才能处理 PUT 请求以编辑每条数据(banner_heading、banner_text、banner_img)
最近更新 更多