【问题标题】:add a key value to object response向对象响应添加键值
【发布时间】:2020-03-11 20:39:06
【问题描述】:
  $.post("./bigData.php", {'username': username}, function(response) {

            console.log(response);
            var bigUser = response[username]; // attempt one
            var bigUser2 = username.response; // attempt two

       });

我上面的response 控制台如下:

{"userSumData":[{"id":"slz1","checked":false},{"id":"slz2","checked":false},{"id":"slz3","checked":false},{"id":"slz4","checked":false}, ....."Map":true}

我想要的结果是这样的:

{"steven":{"userSumData":[{"id":"slz1","checked":false},{"id":"slz2","checked":false},{"id":"slz3","checked":false},{"id":"slz4","checked":false}, ....."Map":true}}

我在response 之后尝试了点符号和方括号,都只是擦除数据。

【问题讨论】:

  • 现在我看到了您想要的回复:const obj = {steven:response};。当然,人们不得不想知道为什么你首先要用一个具有单个属性的对象来包装你的响应。
  • 我在哪里添加这个?这样做,然后在控制台记录 obj 之后,我的响应数据就消失了
  • 这里显然有两个不同的问题。一种是将响应转化为期望的结果,就像 StackSlave 展示的那样。另一个是处理一般的异步代码,我想通常会混淆事情发生的顺序。此外,声明 var 然后结束函数是完全没有意义的;没有任何东西可以访问该变量;没了。

标签: javascript arrays object key


【解决方案1】:

您只是分配给一个变量,而不是一个 Object 属性。您需要创建一个对象,然后将您的响应分配给该对象的 nameVar 属性,例如:

$.post('bigData.php', {username: username}, response=>{
  const obj = {[nameVar]:response}; // notice that we are creating an object and assigning it a variable called obj which has a steven property
  console.log(obj[nameVar]);
}, 'json');

当然,您应该了解异步活动。换句话说,如果你想使用那个obj,它必须与包含你的response 的函数体一起使用。在此之外它将不可用。您始终可以创建 Promise 结构,但这实际上只是减少了相同事物的语法缩进。

【讨论】:

  • 谢谢,但是在此之前我的 console.log(response) 有数据,在我这样做之后它变成了对象对象
  • 您的响应可能是一个字符串。我将设置 'json' 参数。一分钟后测试。
  • 知道了,它现在可以工作了——但是 steven 来自一个变量,即用户名,无论如何要作为一个 var 来处理?即username.response
  • 我把它改成了你可能想要的样子。将 nameVar 替换为您的变量。我将从设计的角度告诉您,仅将对象的属性作为未知数可能没有意义。以后怎么得到未知的名字?循环对象?不是instanceof Array 的对象没有特定的顺序。
【解决方案2】:

如果我做对了,我认为这很简单。试试这个... 符号。如果不是你想要的,请注释掉:)

const obj = {"userSumData":[{"id":"slz1","checked":false},{"id":"slz2","checked":false},{"id":"slz3","checked":false},{"id":"slz4","checked":false}],"Map":true};

const name = "steven"
const newObj = {[name]: {...obj}}

console.log(newObj)

【讨论】:

  • 谢谢,但是当我在回复中实现这一点时,我的回复数据消失了
【解决方案3】:

首先,我认为您的数据具有 JSON 格式,要将其转换为 Object,您必须使用 JSON.parse(response);

您正在尝试改变您的响应对象,不要这样做,而是创建一个具有相同属性的新对象。如果我正确理解您的问题,您可以使用

创建一个新对象

ES6:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

    let my_object = { inside_object : { steven: { ...response  } }}

ES5:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

    let my_object = { inside_object : { steven: Object.assign({}, response) }}

【讨论】:

  • “inside_object”在这里指的是什么?我只有响应对象和名称,即我想用作键的 steven
  • 这将引用一个您将在 { ...response } 之后创建的新对象。每次收到新的 http 请求时,都会创建一个新对象。哦,我想我知道你有 VARIABLE - steven,如果是这样,你可以使用 ES6 括号 [yourKeyVariable]: someValueArray,
猜你喜欢
  • 2015-08-11
  • 2016-09-10
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多