如何访问动态对象键

时间:2019-10-01 10:19:01

标签: javascript search

如何在不知道键名称的情况下循环对象的低谷数组并提取键和值?

样本json:

(4) [{…}, {…}, {…}, {…}]
0: {Destination: "Usa"}
1: {Type: "commercial"}
2: {Transport: "plane"}
3: {price: "501-700"}

想要的结果:
http://localhost/appname +?destination = usa +&type = commercial +等...

任何一般建议或伪代码如何通过选择选项来大致编码边栏搜索?我的计划是:
1.通过单击特定的侧边栏按钮,将选择添加/删除到对象的会话存储阵列;
2.从这些选择中创建URL。
3.使用php,mysql根据url中的选择搜索数据库。
4.生成json页面。
5.根据该json页面使用javascript更新indexsearch.php数据。

4 个答案:

答案 0 :(得分:0)

基本上,您可以使用map遍历数组中的每个对象。

对于数组中的每个对象,我还假设有多个键值对。 Object.entries(obj)返回[键,值]对元组(数组)的数组。

通过将这些与'&'联接,并通过'&'联接objs的外部数组,您将获得所需的结果。您可以使用toLowerCase删除所有区分大小写的问题

let data = [{Destination: "Usa"}, {Type: "commercial"}, {Transport: "plane"}, {price: "501-700"}]
let result = 'http://localhost/appname?' + data.map(obj => Object.entries(obj).map(([key,value]) => key.toLowerCase()+"="+value).join('&')).join('&');

console.log(result);

答案 1 :(得分:0)

这应该以简单的方式提供所需的结果。请注意,最后一个字符将是&,但它仍然是有效的网址。您可以根据需要删除该字符。

const params = [
  {Destination: "Usa"},
  {Type: "commercial"},
  {Transport: "plane"},
  {price: "501-700"},
];

const url = params.reduce((res, param) => {
    Object.keys(param).forEach(key => {
        res += `${key}=${param[key]}&`
    })

	return res;
}, "http://localhost/appname?")
 
console.log(url);
// http://localhost/appname?Destination=Usa&Type=commercial&Transport=plane&price=501-700&

答案 2 :(得分:-1)

var a = [
  {"Destination": "Usa"},
  {"Type": "commercial"},
  {"Transport": "plane"},
  {"price": "501-700"}
];

for (var i = 0; i < a.length; i++) {
  var keys = Object.keys(a[i]);
  for (var k = 0; k < keys.length; k++) {
    console.log(a[i][keys[k]]);
  }
}

您可以使用Object.keys()获取数组键,然后依次遍历数组和键。

然后创建您想要的完整内容:

var a = [
  {"Destination": "Usa"},
  {"Type": "commercial"},
  {"Transport": "plane"},
  {"price": "501-700"}
];

var url = "https://localhost/appname";
for (var i = 0; i < a.length; i++) {
  var keys = Object.keys(a[i]);
  for (var k = 0; k < keys.length; k++) {
    if (i == 0) {
      url += "?";
    } else {
      url += "&";
    }
    url += keys[k] + "=" + a[i][keys[k]];
  }
}
console.log(url);

答案 3 :(得分:-1)

如果我理解得很好,我认为您的数据结构不需要2级(根据您的计划和要执行的操作)。 您可能只有

Lookup

Object.entries https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/entries的MDN文档