<p>这里有一个JavaScript(ES6)函数可以使用:</p>
<p/><div^{cl1}$&13;
<div^{cl2}$&13;
<pre class="snippet-code-js lang-js prettyprint-override"><code>function flatten(data, keys) {
var key = keys[0];
if (key in data)
keys = keys.slice(1);
var res = keys.length && Object.keys(data)
.map( key => data[key] )
.filter( val => Object(val) === val )
.reduce( (res, val) => res.concat(flatten(val, keys)), []);
return !(key in data) ? res
: (res || [{}]).map ( obj => Object.assign(obj, { [key]: data[key] }) );
}
// Sample data
var data = {
"agg": {
"agg1": [
{
"keyWeWant": "*-20.0",
"asdf": 0,
"asdf": 20,
"asdf": 14,
"some_nested_agg": [
{
"keyWeWant2": 20,
"to": 25,
"doc_count": 4,
"some_nested_agg2": {
"count": 7,
"min": 2,
"max": 5,
"keyWeWant3": 2.857142857142857,
"sum": 20
}
},
{
"keyWeWant2": 25,
"to": 30,
"doc_count": 10,
"some_nested_agg2": {
"count": 16,
"min": 2,
"max": 10,
"keyWeWant3": 6.375,
"sum": 102
}
}
]
},
]
}
};
// Flatten it by array of keys
var res = flatten(data, ['keyWeWant', 'keyWeWant2', 'keyWeWant3']);
// Output result
console.log(res);</code></pre>
;
</div>和13;
</div>和13;
<h3>使用替代eh3路径>
<p>如注释中所述,上面的代码不使用路径信息;它只查看所有数组。如果要查找的密钥也出现在应忽略的路径中,则可能会出现问题。在</p>
<p>以下替代方法将使用路径信息,该信息应作为子数组的数组传递,每个子数组首先列出路径键,最后一个元素是要保留的值键:</p>
<p/><div^{cl3}$&13;
<div^{cl2}$&13;
^{pr2}$
;
</div>和13;
</div>和13;