【问题标题】:How to separate a json data in javascript如何在javascript中分离一个json数据
【发布时间】:2019-10-25 15:14:50
【问题描述】:

我对 js 很陌生,现在我有一个 json 数据,它由后端传递到我的 js 文件。 json数据如下:

{
Vivo:{Time:[20190610,20190611],Price:[2000,2000]},
Huawei:{Time:[20190610,20190611],Price:[3000,3000]},
Maxvalue:3000
}

我得到的json数据是通过以下代码:

fetch('/Tmall') //Tmall is the url i go to fetch data
.then(function(response) {
return response.json();
}).then(function(Data) {

...
}

接下来我将处理数据以呈现在前端,但我不知道如何将数据分配给两个不同的参数:

Cellphone = 
{
Vivo:{Time:[20190610,20190611],Price:[2000,2000]},
Huawei:{Time:[20190610,20190611],Price:[3000,3000]}
}

Max = {Maxvalue:3000}

这是我尝试做的,我使用 if-is 键将数据与原始数据分开,但它不起作用

    var Cellphone = {}
    for (var i = 0; i < Data.length; i++)
    {
      if (Data.key[i] != 'Maxvalue'){
        Cellphone.push(Data[i])
      }
    }

【问题讨论】:

  • 输出应该是什么?
  • 使用点符号访问对象的数据:let Cellphone = { Vivo: Data.Vivo, Huawei: Data.Huawei };let Max = Data.Maxvalue;
  • @ZivBen-Or 这是怎么复制的?
  • @JackBashford 倒数第二个代码块是我想要的输出 :) 我写的最后一个代码块只处理手机部分。实际上我实际上有多个手机信息需要处理

标签: javascript arrays json object


【解决方案1】:

您可以将Object.keys()Array.prototype.filter()Array.prototype.map() 结合使用。

代码:

// Your `Data` response...
const Data = {Vivo:{Time:[20190610,20190611],Price:[2000,2000]},Huawei:{Time:[20190610,20190611],Price:[3000,3000]},Maxvalue:3000};

// Logic
const Cellphone = Object.keys(Data)
  .filter(k => k !== 'Maxvalue')
  .map(k => ({ [k]: Data[k] }));
const Max = { Maxvalue: Data.Maxvalue };

console.log('Cellphone:', Cellphone);
console.log('Max:', Max);

【讨论】:

  • 嗨,“k”是保留字吗?还是在 filter() 或 map() 中可以自动识别为变量来遍历参数?我不知道机器是如何意识到 k 在这里的
  • @TileiLiu k 是变量名.. 键数组中正在处理的当前元素
  • 如果我将 'k' 替换为 'a','b','c' .... 甚至是像 'element' 这样的词,是否可以适应?
  • 是的,没错。我使用k,因为引用对象keys,但你可以使用任何变量名
【解决方案2】:

只需提取Maxvalue 属性,并将其他属性分配给Cellphone。解构和传播真的很简单:

const data = {
  Vivo: {
    Time: [20190610, 20190611],
    Price: [2000, 2000]
  },
  Huawei: {
    Time: [20190610, 20190611],
    Price: [3000, 3000]
  },
  Maxvalue: 3000
};

const { Maxvalue: Max, ...Cellphone } = data;
console.log("Max:", Max);
console.log("Cellphone:", Cellphone);
.as-console-wrapper { max-height: 100% !important; top: auto; }

【讨论】:

  • 嗨~我不明白这是什么意思 "const { Maxvalue: Max, ...Cellphone } = data;"
  • const {...} = data 表示我们正在提取对象属性。 Maxvalue: Max 生成了一个名为 Max 的新变量,并赋予它 data.Maxvalue 的值。 ...Cellphone 创建了一个名为 Cellphone 的新对象,其余所有属性都在 data 中。
  • 您好,我将代码放在我的 js 文件中,但它仍然无法正常工作。是不是因为我的“数据”实际上是一个对象而不是 const?
【解决方案3】:

您可以单独选择最大值,将其保存到变量中,然后将其从对象中删除。这将允许您将所有手机分配给一个变量,即使它们的名称发生了变化。例如;

let data = {
  Vivo:{Time:[20190610,20190611],Price:[2000,2000]},
  Huawei:{Time:[20190610,20190611],Price:[3000,3000]},
  Maxvalue:3000
}

// save the maxValue key
let maxValue = data.Maxvalue;

// then remove it from the object
delete(data.Maxvalue);

// the remaining keys are cellphones
let cellPhones = data;

console.log(maxValue, cellPhones);

【讨论】:

  • 谢谢!这也是一个很好的答案。
【解决方案4】:

在将Data 设置为参数的函数中,执行以下操作

let Cellphone = {
    Vivo: Data.Vivo,
    Huawei: Data.Huawei
};
let Max = Data.Maxvalue;

【讨论】:

  • 手机名字变了怎么办?
  • js中的大写通常用于class
【解决方案5】:

以下代码应该可以解决您的问题

var phones = {};
var max;
Object.entries(data).forEach(function (entry) {
  if (entry[0] == "Maxvalue") {
    max = entry[1];
  }
  else {
    phones[entry[0]] = entry[1];
  }
});
console.log("Phones: ", phones);
console.log("Max: ", max)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2018-02-04
    • 1970-01-01
    • 2021-08-09
    相关资源
    最近更新 更多