Lodash映射到对象数组

时间:2017-10-19 08:05:56

标签: lodash transformation

我从一个jQuery包装器开始,其中包含许多<A> - 标签元素。我想要的结果是:

[{href: "http://...", text: "The inner text"}, {...}, ...]

到目前为止,我得到了这个:

_.map($pubs, ($pub) => _.pick($pub, 'href', 'innerText'))

这样可行,但看起来有更好的方法,内部文本属性命名为&#34; innerText&#34;而不是&#34; text&#34;。我确实想要innerText元素,而不仅仅是.text(),因为它不会清理输出(换行符,空格,......)。

1 个答案:

答案 0 :(得分:1)

您可以使用ES6 destructuringassign text to a new variable。现在,您可以使用shorthand property names创建包含hreftext变量的新对象:

&#13;
&#13;
const links = $('a').toArray();

const result = links.map(({ href, innerText: text }) => ({ href, text }));

console.log(result);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="http://www.google.com">Google</a>
<a href="http://www.facebook.com">Facebook</a>
<a href="http://www.apple.com">Apple</a>
&#13;
&#13;
&#13;

您还可以使用jQuery&#39; '.map()`

&#13;
&#13;
const result = $('a').map((k, { href, innerText: text }) => ({ href, text })).toArray();

console.log(result);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="http://www.google.com">Google</a>
<a href="http://www.facebook.com">Facebook</a>
<a href="http://www.apple.com">Apple</a>
&#13;
&#13;
&#13;