3

次のようなオブジェクトがあります。

data:
{
    connection:
    {
        type: 0,
        connected: false
    },
    acceleration:
    {
        x: 0,
        y: 0,
        z: 0,
        watchId: 0,
        hasError: false
    }        
},

次のようにフラット配列に変換します。

"connected": false
"hasError": false
"type": 0
"watchId": 0
"x": 0
"y": 0
"z": 0

は簡単な作業です (再発は友達です!)。

しかし、いわゆる完全な親でそれを取得するJavascriptの方法はありますか、つまり次のようなものです:

"connection.connected": false
"acceleration.hasError": false
"connection.type": 0
"acceleration.watchId": 0
"acceleration.x": 0
"acceleration.y": 0
"acceleration.z": 0

それとも私は多くを期待していますか?

4

4 に答える 4

2

後世のために、フラットまたは私がForms JS用に書いた同様のユーティリティであるFlattenをチェックしてください。

于 2015-03-15T00:10:11.297 に答える
1

私の5セント。

プロパティではなくオブジェクトを平坦化したい場合

言い換えると。

次のようなものがあります。

var obj = {
  one_a: {
    second_a: {
      aaa: 'aaa',
      bbb: 'bbb'
    },
    second_b: {
      qqq: 'qqq',
      third_a: {
        www: 'www',
        eee: 'eee',
        fourth_a: {
          'rrr': 'rrr',
          fifth: {
            ttt: 'ttt'
          }
        },
        fourth_b: {
          yyy: 'yyy',
        }
      },
      third_b: {
        'uuu': 'uuu'
      }
    }
  },
  one_b: {
    iii: 'iii'
  }
}

ネストされたオブジェクトをフラットにしたいが、プロパティをフラットにしたくない:

{ 'one_a second_a ': { aaa: 'aaa', bbb: 'bbb' },
  'one_a second_b ': { qqq: 'qqq' },
  'one_a second_b third_a ': { www: 'www', eee: 'eee' },
  'one_a second_b third_a fourth_a ': { rrr: 'rrr' },
  'one_a second_b third_a fourth_a fifth ': { ttt: 'ttt' },
  'one_a second_b third_a fourth_b ': { yyy: 'yyy' },
  'one_a second_b third_b ': { uuu: 'uuu' },
  'one_b ': { iii: 'iii' } }

コード:

function flatten (obj, includePrototype, into, prefix) {
  into = into || {};
  prefix = prefix || "";

  for (var k in obj) {
    if (includePrototype || obj.hasOwnProperty(k)) {
      var prop = obj[k];
      if (prop && typeof prop === "object" && !(prop instanceof Date || prop instanceof RegExp)) {
        flatten(prop, includePrototype, into, prefix + k + " ");
      }
      else {
        if (into[prefix] && typeof into[prefix] === 'object') {
          into[prefix][k] = prop
        } else {
          into[prefix] = {}
          into[prefix][k] = prop
        }
      }
    }
  }

  return into;
}

閉鎖の答えに基づく

于 2016-10-14T08:20:31.323 に答える