我需要一个具有可以动态添加的属性的对象,并且在该属性内还需要动态添加一个对象。
relinquish '$' variable
这就是我想要的
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script src="https://code.jquery.com/jquery-1.6.2.js"></script>
<script>
jq162 = jQuery.noConflict( true );//This restores 1.10.2 to '$'
jq162('body').show();//jq162 holds jQuery 1.6.2
</script>
答案 0 :(得分:1)
您可以检查下面的代码,我们使用映射将数组值移动到对象属性,然后最后将结构重新分配给相同的变量并获得输出。
const paths = ["POOL-p64/ld3/1/eee", "POOL-p64/ld3/1/afp_new"];
const peer = "EVO-Cluster-at-EVO-57";
const values = [
{peer: "EVO-Cluster-at-EVO-57", path: "POOL-p64/ld3/1/eee", name: "14", isAllocated: false},
{peer: "EVO-Cluster-at-EVO-57", path: "POOL-p64/ld3/1/afp_new", name: "3", isAllocated: false}
];
let out = {};
paths.map(function(x, i) {
let value = values.filter(brick => brick.isAllocated === false && brick.path===x);
out[x] = value ? [values[i]] : []
});
out = {[peer]: out}
console.log(out);
答案 1 :(得分:1)
我想这就是你想要的。
我在原始数组中添加了一些值以查看更多边缘情况。
应过滤掉添加的两个对象(同级:"EVO-Cluster-at-EVO-571"
和路径:"POOL-p64/ld3/1/eeea"
)。
我还添加了两个对象,它们共享相同的对等点和路径,以便将它们推到objectINeeded[<peer>][<path>]
的数组中。
结果是一个对象具有一个对等键("EVO-Cluster-at-EVO-57"
),该对象具有两个路径键("POOL-p64/ld3/1/eee"
和"POOL-p64/ld3/1/afp_new"
),其中第一个具有两个对象,第二个具有只有一个物体。
这只是一个更笼统的答案,因为它允许多个同伴
console.clear()
const paths = [
"POOL-p64/ld3/1/eee",
"POOL-p64/ld3/1/afp_new"
];
const peers = ["EVO-Cluster-at-EVO-57"];
const values = [
{
peer: "EVO-Cluster-at-EVO-57",
path: "POOL-p64/ld3/1/eeea",
name: "14",
isAllocated: false
},
{
peer: "EVO-Cluster-at-EVO-571",
path: "POOL-p64/ld3/1/eee",
name: "14",
isAllocated: true
},
{
peer: "EVO-Cluster-at-EVO-57",
path: "POOL-p64/ld3/1/eee",
name: "14",
isAllocated: false
},
{
peer: "EVO-Cluster-at-EVO-57",
path: "POOL-p64/ld3/1/eee",
name: "15",
isAllocated: false
},
{
peer: "EVO-Cluster-at-EVO-57",
path: "POOL-p64/ld3/1/afp_new",
name: "3",
isAllocated: false
}
];
// Filter the original Array so that only those with the right properties are used
const filtered = values.filter(brick => (brick.isAllocated === false)
&& (paths.indexOf(brick.path) !== -1)
&& (peers.indexOf(brick.peer) !== -1)
);
// 'Map' the filteres array to an object where the 'peer' and 'path' values are used as keys
const objectINeeded = filtered.reduce((map, obj, org) => {
if (!map[obj.peer]) { map[obj.peer] = {}; }
if (!map[obj.peer][obj.path]) { map[obj.peer][obj.path] = []; }
map[obj.peer][obj.path].push({...obj});
return map;
}, {});
console.log(objectINeeded)
答案 2 :(得分:0)
尝试此代码。
let objectINeeded2 = {};
objectINeeded2[peer] = {};
paths.forEach((x) => {
objectINeeded2[peer][x] = values.filter(brick => brick.isAllocated === false && brick.path === x);
})
console.log(objectINeeded2);