<p>如果您正在寻找一个Javascript解决方案,您需要自己的笛卡尔积函数,但其余的与上面的Python解决方案非常相似。这个函数使用了一个可变的笛卡尔函数,所以需要额外的步骤<code>cartesian.apply(null, arr)</code>。但除此之外,还应该直截了当:</p>
<p/><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
;
<div^{cl2}$
;
<pre class="snippet-code-js lang-js prettyprint-override"><code>const cartesian = (xs, ys, ...zs) => ys
? cartesian([].concat(...xs.map(x => ys.map(y => [].concat(x, y)))), ...zs)
: xs;
const toObj = xs => xs.reduce((a, b) => Object.assign(a, b), {})
const toNames = people => people.map(person => Object.keys(person)
.filter(name => ['name', 'short'].includes(name))
.map(name => ({[person[name]]: person.city}))
)
const nameCombos = people => cartesian.apply(null, toNames(people)).map(toObj)
const people = [
{ name: "Robert", city: "New York", short: "Bob" },
{ name: "Allison", city: "Los Angeles", short: "Ally" },
{ name: "James", city: "Chicago", short: "Jim" },
{ name: "Hannah", city:"Toronto" },
{ name: "Elizabeth", city: "London" }
]
console.log(nameCombos(people))</code></pre>
;
</div>
;
</div>
;