我想将其转换为基于键数组排序的对象数组:
{
tom: 11,
jim: 22,
jay: 13
}
输入 - >输出示例:
['jim', 'tom', 'kim', 'jay']
- > [{jim: 22}, {tom: 11}, {jay: 13}]
['may', 'jay', 'tom', 'jim']
- > [{jay: 13}, {tom: 11}, {jim: 22}]
我怎样才能做到这一点?我宁愿一线lodash解决方案。
答案 0 :(得分:0)
对于它的价值,这是一个执行你想要的JS功能。
function transform(targetObj, keyArray) {
let resultArray = [];
// Sanity (may want to throw error here)
if (!targetObj || !keyArray) { return resultArray; }
for (let i = 0; i < keyArray.length; i++) {
if (!targetObj.hasOwnProperty(keyArray[i])) { continue; }
let item = {};
item[keyArray[i]] = targetObj[keyArray[i]];
resultArray.push(item);
}
return resultArray;
}
测试
let obj = { tom: 11, jim: 22, jay: 13 };
let input1 = ['jim', 'tom', 'kim', 'jay'];
let input2 = ['may', 'jay', 'tom', 'jim'];
let result1 = transform(obj, input1);
console.log(JSON.stringify(result1));
let result2 = transform(obj, input2);
console.log(JSON.stringify(result2));
答案 1 :(得分:0)
假设对象名为keys
,并且要查找的键列表名为_.zip([keys, keys.map(x => obj[x])]).filter(([k, v]) => v).map(x => _.fromPairs([x]))
:
_.toPairs(obj).filter(([k, v]) => _.include(keys, k)).map(x => _.fromPairs([x]))
或者,如果您不关心订单,还有另一种方式:
x <- as.numeric (readline(prompt="How many concs?: "))
y <- paste("conc",1:x)
print(paste("enter", x," numbers separated return: "))
a <- scan(nmax=x,what=double())
df = data.frame(conc=y,value=a)
答案 2 :(得分:0)
单线程lodash解决方案是使用lodash#toPairs
将对象转换为键值对数组lodash#chunk
以将每对与另一个数组包装起来作为将每个项映射到的准备使用lodash#map
lodash#fromPairs
iteratee将对形成对象。
var result = _(data).toPairs().chunk().map(_.fromPairs).value();
var data = {
tom: 11,
jim: 22,
jay: 13
};
var result = _(data).toPairs().chunk().map(_.fromPairs).value();
console.log(result);
&#13;
.as-console-wrapper{min-height:100%;top:0}
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
&#13;
Vanilla JS ES6解决方案是使用Object#keys
从对象Array#map
获取一组键,以映射每个键以关联每个键以形成对象数组。我们使用ES6计算属性名称功能将键直接关联到匿名对象。
var result = Object.keys(data).map(key => ({ [key]: data[key] }));
var data = {
tom: 11,
jim: 22,
jay: 13
};
var result = Object.keys(data).map(key => ({ [key]: data[key] }));
console.log(result);
&#13;
.as-console-wrapper{min-height:100%;top:0}
&#13;
如果您使用的浏览器不支持ES6,那么您只需将上述解决方案转换为:
var result = Object.keys(data).map(function(key) {
var object = {};
object[key] = data[key];
return object;
});
var data = {
tom: 11,
jim: 22,
jay: 13
};
var result = Object.keys(data).map(function(key) {
var object = {};
object[key] = data[key];
return object;
});
console.log(result);
&#13;
.as-console-wrapper{min-height:100%;top:0}
&#13;
答案 3 :(得分:0)
基本上对于单线程解决方案,您不需要lodash
,只需简单filter
和map
即可,但如果您愿意,可以使用{{ 1}}。
lodash
现在,让我们假设您有2个(某些)数组
//this is your source object
var keys = {
tom: 11,
jim: 22,
jay: 13
}
我们走了:
var input1 = ['jim', 'tom', 'kim', 'jay'];
var input2 = ['may', 'jay', 'tom', 'jim'];
以下是适合您的工作片段:
//for first input
input1.filter(s=>keys[s]).map(s=> ({[s]: keys[s]}));
//for secondinput
input2.filter(s=>keys[s]).map(s=> ({[s]: keys[s]}));
&#13;